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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

原生JS運(yùn)動(dòng)實(shí)現(xiàn)輪播圖

瀏覽:122日期:2024-04-08 18:43:37

原生JS運(yùn)動(dòng)實(shí)現(xiàn)輪播圖

**基本原理:**通過(guò)控制包含n張圖片的ul的left值來(lái)實(shí)現(xiàn)圖片自動(dòng)運(yùn)動(dòng)的效果,其中列表中l(wèi)i元素的個(gè)數(shù)為n,第一個(gè)li和最后一個(gè)li里存放的圖片應(yīng)為同一張圖片,當(dāng)圖片運(yùn)動(dòng)到最后一張時(shí),將ul的left值設(shè)為0,即可達(dá)到圖片無(wú)線輪播的效果。

運(yùn)動(dòng)函數(shù)的實(shí)現(xiàn)

函數(shù)需傳入元素(即需要參與運(yùn)動(dòng)的元素)、目標(biāo)值(以對(duì)象的形式呈現(xiàn),如{left: 300})、callback(回調(diào)函數(shù))。

//多物體多值運(yùn)動(dòng)+回調(diào)機(jī)制function startMove(dom, attrObj, callback) { var key = true; var iSpeed = null, iCur = null; clearInterval(dom.timer); if (key) { dom.timer = setInterval(function() { //bStop用來(lái)判斷是否開(kāi)始執(zhí)行回調(diào)函數(shù) var bStop = true; //判斷傳入目標(biāo)值中的“鍵”類(lèi)型是否為opacity for (var attr in attrObj) { //若要改變的樣式為opacity,則將元素的opacity擴(kuò)大100被進(jìn)行操作 if (attr === ’opacity’) { iCur = parseFloat(getStyle(dom, attr)) * 100; } else { iCur = parseInt(getStyle(dom, attr)); } //運(yùn)動(dòng)速度設(shè)為目標(biāo)值減去當(dāng)前值的一半,即當(dāng)前狀態(tài)離目標(biāo)值越接近,運(yùn)動(dòng)速度越小 iSpeed = (attrObj[attr] - iCur) / 2; //對(duì)速度進(jìn)行取整 iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); if (attr === ’opacity’) { dom.style.opacity = (iCur + iSpeed) / 100; } else { dom.style[attr] = iCur + iSpeed + ’px’; } if (iCur !== attrObj[attr]) { bStop = false; } } //當(dāng)bStop為true時(shí),元素的所有樣式均已達(dá)到目標(biāo)值,清理定時(shí)器并執(zhí)行回調(diào)函數(shù) if (bStop) { clearInterval(dom.timer); typeof callback == ’function’ && callback(); } }, 30) } if (!key) { }}//用來(lái)獲取元素實(shí)時(shí)的樣式值function getStyle(elem, prop){ if (window.getComputedStyle){ return window.getComputedStyle(elem, null)[prop]; }}

HTML部分

HTML中包含一個(gè)div,用來(lái)顯示當(dāng)前要播放的圖片,該div中又包含一個(gè)ul(用來(lái)存放所有包含圖片的li)、三個(gè)div(其中兩個(gè)充當(dāng)圖片左右切換的按鈕,第三個(gè)存放圖片索引點(diǎn),通過(guò)點(diǎn)擊索引也可切換到要查看的圖片),代碼如下:

<div class='wrapper'> <ul class='sliderPage'> <li> <img src='http://www.hdgsjgj.cn/bcjs/image/dog/阿拉斯加.jpeg'/> </li> <li> <img src='http://www.hdgsjgj.cn/bcjs/image/dog/比熊.jpeg'/> </li> <li> <img src='http://www.hdgsjgj.cn/bcjs/image/dog/邊牧.jpeg'/> </li> <li> <img src='http://www.hdgsjgj.cn/bcjs/image/dog/柯基.jpeg'/> </li> <li> <img src='http://www.hdgsjgj.cn/bcjs/image/dog/阿拉斯加.jpeg'/> </li> </ul> <div class='btn leftBtn'>&lt;</div> <div class='btn rightBtn'>&gt;</div> <div class='sliderIndex'> <span class='active'></span> <span></span> <span></span> <span></span> </div></div>

CSS代碼

此處采用的為內(nèi)聯(lián)樣式表

<style> *{ margin: 0; padding: 0; list-style: none; } .wrapper{ position: relative; margin: 100px auto 0; width: 600px; height: 360px; overflow: hidden; } .wrapper .sliderPage{ position: absolute; left: 0; width: 3000px; height: 360px; } .wrapper .sliderPage li{ width: 600px; height: 360px; float: left; } .wrapper .sliderPage li img{ width: 100%; height: 100%; } .btn{ position: absolute; top: 50%; width: 20px; height: 20px; color: #fff; text-align: center; line-height: 20px; background-color: #000; opacity: 0.2; cursor: pointer; } .leftBtn{ left: 5px; } .rightBtn{ right: 5px; } .wrapper:hover .btn{ opacity: 0.8; } .sliderIndex{ position: absolute; width: 100%; bottom: 10px; cursor: pointer; text-align: center; } span{ width: 8px; height: 8px; background-color: #cccccc; border-radius: 50%; display: inline-block; margin-right: 5px; } .active{ background-color: orange; }</style>

圖片自動(dòng)運(yùn)動(dòng)及點(diǎn)擊運(yùn)動(dòng)事件綁定

要點(diǎn):

1、當(dāng)圖片運(yùn)動(dòng)到最后一張時(shí)(顯示圖片為第一張圖片),將ul的left值設(shè)為0即可實(shí)現(xiàn)無(wú)限輪播;2、圖片每次運(yùn)動(dòng)的值為li的寬度;3、圖片的運(yùn)動(dòng)需要一定的時(shí)間,因此在圖片運(yùn)動(dòng)過(guò)程中應(yīng)禁止產(chǎn)生其它定時(shí)器,否則會(huì)造成運(yùn)動(dòng)尺寸混亂而導(dǎo)致圖片輪播出現(xiàn)問(wèn)題,這里用lock來(lái)進(jìn)行實(shí)現(xiàn),在ul運(yùn)動(dòng)過(guò)程中將lock值設(shè)為false,運(yùn)動(dòng)結(jié)束后又將lock值設(shè)為true;4、通過(guò)index值來(lái)實(shí)現(xiàn)索引顯示圖片功能,圖片輪播過(guò)程中,index初始值為0,當(dāng)圖片向右輪播時(shí)index值加1,圖片向左輪播時(shí),index值減1,index值為0時(shí),若讓圖片向左輪播,則將index值設(shè)為n(li個(gè)數(shù))并進(jìn)行輪播,而當(dāng)index值為3且圖片向右輪播時(shí),在ul運(yùn)動(dòng)完成后將index值設(shè)為0;

var timer = null;var sliderPage = document.getElementsByTagName(’ul’)[0];var moveWidth = sliderPage.children[0].offsetWidth;var num = sliderPage.children.length - 1;var leftBtn = document.getElementsByClassName(’leftBtn’)[0];var rightBtn = document.getElementsByClassName(’rightBtn’)[0];var lock = true;var index = 0;var indexArray = document.getElementsByClassName(’sliderIndex’)[0].getElementsByTagName(’span’);//索引切換for (var i = 0; i < indexArray.length; i ++){ (function(myindex){ indexArray[myindex].onclick = function(){ lock = false; clearTimeout(timer); index = myindex; changeIndex(index); startMove(sliderPage, {left: -index * moveWidth}, function(){ lock = true; timer = setTimeout(autoMove, 3000); }) } }(i))}//圖片運(yùn)動(dòng)過(guò)程中改變index點(diǎn)的樣式function changeIndex(index){ for (var i = 0; i < indexArray.length; i++){ indexArray[i].className = ’’; } indexArray[index].className = ’active’;}timer = setTimeout(autoMove, 3000);//向左翻leftBtn.onclick = function (){ autoMove(’right->left’);}//向右翻rightBtn.onclick = function (){ autoMove(’left->right’);}//direction//默認(rèn)輪播方向 ’left->right’ / undefined//點(diǎn)擊left按鈕 ’right->left’function autoMove(direction){ clearTimeout(timer); if (lock){ lock = false; if (!direction || direction === ’left->right’){ index++; startMove(sliderPage, {left: sliderPage.offsetLeft - moveWidth}, function(){ if (sliderPage.offsetLeft === - num * moveWidth){ index = 0; sliderPage.style.left = ’0px’; } timer = setTimeout(autoMove, 3000); lock = true; changeIndex(index); }); }else if(direction === ’right->left’){ if (sliderPage.offsetLeft === 0){ index = num; sliderPage.style.left = - num * moveWidth + ’px’; } index--; startMove(sliderPage, {left: sliderPage.offsetLeft + moveWidth}, function () { timer = setTimeout(autoMove, 3000); lock = true; changeIndex(index); }) } }}

以上即為通過(guò)原生JS運(yùn)動(dòng)所實(shí)現(xiàn)的圖片輪播。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 河北码上网络科技|邯郸小程序开发|邯郸微信开发|邯郸网站建设 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 澳洁干洗店加盟-洗衣店干洗连锁「澳洁干洗免费一对一贴心服务」 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | DWS物流设备_扫码称重量方一体机_快递包裹分拣机_广东高臻智能装备有限公司 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 联系我们-腾龙公司上分客服微信19116098882 | 苏州柯瑞德货架-仓库自动化改造解决方案 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 耐酸泵,耐酸泵厂家-淄博华舜耐腐蚀真空泵 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 光栅尺_Magnescale探规_磁栅尺_笔式位移传感器_苏州德美达 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 | 微型实验室真空泵-无油干式真空泵-微型涡旋耐腐蚀压缩机-思科涡旋科技(杭州)有限公司 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 | 避光流动池-带盖荧光比色皿-生化流动比色皿-宜兴市晶科光学仪器 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 广东机电安装工程_中央空调工程_东莞装饰装修-广东粤标建设有限公司 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 |