电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

js代碼實現輪播圖

瀏覽:103日期:2024-05-10 08:35:08

本文實例為大家分享了js實現輪播圖的具體代碼,供大家參考,具體內容如下

又從頭到尾把輪播圖研究了一遍,感覺理解更深刻了。就怕自己搞不懂,分析了各個步驟的思路,為啥用,怎么用。總算搞清楚了。話不多說,干貨奉上.

效果圖:

js代碼實現輪播圖

//1,左右按鈕初始隱藏 鼠標進入box 按鈕顯示 鼠標離開box 按鈕隱藏//獲取元素var box = document.getElementById(’box’);var leftbtn = document.getElementById(’leftbtn’);var rigbtn = document.getElementById(’rigbtn’);//因為圖片寬度是多個事件需要用到 所以要定義為全局變量var pic_width = box.clientWidth;//注冊事件box.addEventListener(’mouseenter’, function() { leftbtn.style.display = ’block’; rigbtn.style.display = ’block’; //清除定時器 停止自動播放 clearInterval(timer); //停止播放后 清空定時器變量 提升運行效率 timer = null;});box.addEventListener(’mouseleave’, function() { leftbtn.style.display = ’none’; rigbtn.style.display = ’none’; //timer在11條里聲明過了 這里就不需要再加var進行聲明了 timer = setInterval(function() { rigbtn.click(); }, 1500);});//6,創建動畫函數animate 點擊小圓點 圖片會移動 //因為圖片需要緩慢移動到目標位置 而不是瞬移 所以需要讓動畫函數帶緩動效果function animate(obj, target, callback) { //obj是移動的對象 target是移動的目標位置 callback是回調函數 clearInterval(obj.timer); //創建緩動函數 緩動的核心思想就是把移動到目標位置的距離分成若干小步 //一定時間內走一小步,讓這個距離在若干時間完成若干小步后走完 function move() { //定義每一小步走的距離 把一次移動到目標位置的距離分為10份 //每一份就是一個step var step = (target - obj.offsetLeft) / 10; //step可能不是整數 導致最終移動距離有誤差 //所以要把每一步的step變成整數 //如果step是正數 就取大于step的最小整數 //如果step是負數 就取小于step的最大整數 用Math()的知識 /*if(step > 0) { step = Math.ceil(step);//向上取整 } else { step = Math.floor(step);//向下取整 }*/ //可以將上面的if else語句簡化為三元運算符 step = step > 0 ? Math.ceil(step) : Math.floor(step); //如果走到了目標位置 就清除定時器 if(obj.offsetLeft == target) { clearInterval(obj.timer); //因為回調函數是定時器結束后再調用函數 //所以這里清除定時器后 需要判斷一下是否有回調函數 有就調用 沒有就不調用 /*if(callback) { callback(); }*/ //上面的判斷語句可以簡化為 callback&&callback(); } //把每一小步移動的距離和offsetLeft之和,給obj的left值 //注意,這里obj.style.left對應的是數值+像素單位,一定不要忘了+’px’ obj.style.left = obj.offsetLeft + step + ’px’; } //給obj創建專屬的定時器 //用定時器實現一定時間走一小步的結果 這里是40毫秒移動一個step的距離 //注意,專屬定時器不需要用var了 obj.timer = setInterval(move, 40);}//2,動態添加小圓點 圖片的數量就是小圓點的個數//獲取元素var ul01 = document.getElementById(’ul01’);var ul02 = document.getElementById(’ul02’);//添加多個li 用for循環 for(var i = 0; i < ul01.children.length; i++) { //創建元素creLi var creLi = document.createElement(’li’); //3,創建自定義屬性data-index 用來獲取小圓點的索引號 creLi.setAttribute(’data-index’, i); //添加元素 ul02.appendChild(creLi); //4,當前點擊的小圓點 顏色發生變化 創建類urrent //因為圖片默認開始顯示第一張 所以先讓第一個小圓點小時current類 ul02.children[0].className = ’current’; //5,給小圓點創建點擊事件 點擊小圓點 當前點擊的小圓點變色 //用排他思想 for循環 //注冊點擊事件 creLi.addEventListener(’click’, function() { //干掉所有人 for(var i = 0; i < ul02.children.length; i++) { ul02.children[i].className = ’’; } //留下我自己 this.className = ’current’; //7,點擊小圓點 圖片跟著動 調用動畫函數 //分析 點擊圓點1 圖片向左移動0個圖片的寬度box.clientWidth //點擊圓點2 圖片向左移動1個圖片的寬度 以此類推 //圖片移動的距離 就是 當前被點擊圓點的索引號乘以圖片的寬度 //獲取自定義屬性 當前被點擊的小圓點的索引號 var index = this.getAttribute(’data-index’); num = index; circle = index; animate(ul01, -index*pic_width); });}//8,右側按鈕//8.1 點擊右側按鈕 圖片向左移動//點擊1次 圖片向左移動1個圖片寬度 顯示圖片2//點擊2次 向左移動2個圖片寬度 顯示圖片3 以此類推//當顯示到第3張圖片即最后一張圖片時 再點擊右側按鈕 會顯示空白//重點: 實現無縫鏈接,即當顯示到最后一張圖片時 再點擊右側按鈕 會顯示圖片1//怎么做 在圖片3后面克隆一張圖片1//顯示圖片3時 再點擊按鈕 ul01繼續向左移動 顯示圖片1//然后迅速跳轉到跳轉到圖片1 讓ul01.style.left歸零//設置次數變量numvar num = 0;//克隆圖片1 先克隆 再添加 注意 克隆圖片也是全局事件 不是局部的var liCopy = ul01.children[0].cloneNode(true)//深克隆ul01.appendChild(liCopy);//添加新的li后,注意取css里修改ul01的寬度//console.log(ul01.children.length); 元素個數變成了4//獲取元素rigbtnvar rigbtn = document.getElementById(’rigbtn’);//給按鈕點擊事件安裝節流閥var flag = true; //左右按鈕都要用 所以設置全局變量//注冊點擊事件rigbtn.addEventListener(’click’, function() { if(flag) { //初始狀態 先把節流閥關了 讓自動播放的圖片播放完一張圖片前 點擊按鈕無效 flag = false; //先做個判斷 //點擊第2次的時候 顯示圖片3 再點擊 就顯示克隆的圖片1 //這時候 讓ul01位置歸零 讓num的值歸零以便從頭開始 if(num == ul01.children.length - 1) { ul01.style.left = 0; num = 0; } //點擊1次 移動距離就是1*pic_width //點擊1次 讓num自增1 num++; //注意 這里如果先自增 再做判斷 //會出現一個bug 就是當再次顯示圖片1時 點擊無效 重新點擊才會顯示圖片2 //因為點擊第三次時 本來應該跳轉到圖片1的 結果num被歸零了 再點擊還是顯示圖片1 //調用動畫函數 animate(ul01, -num*pic_width, function() { //function(){}是回調函數 //動畫結束一個動作后 即播放完該圖片后 再回頭打開節流閥 讓下一次點擊生效 flag = true; }); circle++; if(circle == ul02.children.length) { circle = 0; } //因為這段排他思想的小圓點代碼重復使用 所以可以封裝成一個函數進行調用 /*for(var i = 0; i < ul02.children.length; i++) { ul02.children[i].className = ’’; } ul02.children[circle].className = ’current’;*/ cir(); }}); function cir() { for(var i = 0; i < ul02.children.length; i++) { ul02.children[i].className = ’’; } ul02.children[circle].className = ’current’;}//9,點擊按鈕 圖片移動 小圓點跟著移動 點擊小圓點 圖片跟著移動 num次數也變化//讓圖片 小圓點 按鈕次數 一起變化的核心 就是圖片動 num變化 小圓點當前的current類發生變化//即 圖片移動 當前小圓點變色 點擊按鈕 當前小圓點變色//當前小圓點變色 圖片移動 按鈕次數發生變化 num index 圖片距離 一起變化 //但是index是局部變量 怎么讓三者綁定呢//就要重新創建一個全局變量 代替index 作為小圓點當前的索引號 讓三者綁定var circle = 0;//10,點擊左側按鈕//和右側按鈕點擊事件的代碼基本相同 但是方向相反 需要修改一些數據//直接把右側按鈕點擊事件的代碼復制過來 然后修改數據//獲取元素leftbtnvar leftbtn = document.getElementById(’leftbtn’);//注冊點擊事件leftbtn.addEventListener(’click’, function() { //同理,給左側按鈕也加個節流閥 if(flag) { flag = false; //先做個判斷 //開始時 未點擊 num為0 if(num == 0) { num = ul01.children.length-1; ul01.style.left = -num*pic_width + ’px’; } //點擊左側按鈕時 num自減 num--; animate(ul01, -num*pic_width, function() { flag = true; }); circle--; if(circle < 0) { circle = ul02.children.length - 1; } //因為這段排他思想的小圓點代碼重復使用 所以可以封裝成一個函數進行調用 /*for(var i = 0; i < ul02.children.length; i++) { ul02.children[i].className = ’’; } ul02.children[circle].className = ’current’;*/ cir(); }});//11,圖片自動播放 相當于每隔一定時間 用定時器調用點擊右側按鈕的時間 var timer = setInterval(function() { rigbtn.click();}, 1500);//12,鼠標進入box 停止自動播放 鼠標離開box 繼續自動播放//13,節流閥 控制圖片播放的頻率//當前 快速點擊按鈕 圖片高速播放 timer定時器還沒執行結束 就開始播放下一張圖片了//用flag控制 flag為true 打開節流閥 啟用定時器 播放圖片//flag為false 關閉節流閥 關閉的定時器 點擊按鈕無效 停止播放圖片//給按鈕點擊事件安裝節流閥

精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 小威小说网 - 新小威小说网 - 小威小说网小说搜索引擎 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 线粒体膜电位荧光探针-细胞膜-标记二抗-上海复申生物科技有限公司 | 起好名字_取个好名字_好名网免费取好名在线打分 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 江苏齐宝进出口贸易有限公司| 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 成都中天自动化控制技术有限公司 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 佛山市德信昌电子有限公司| 写方案网_方案策划方案模板下载| 517瓜水果特产网|一个专注特产好物的网站 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | 车载加油机品牌_ 柴油加油机厂家|