一个简单的轮播图代码

    技术2022-07-11  77

    #轮播图dome

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="./css/index.css"> </head> <body> <div class="lbbox"> <ul class="oUl"> <a href=""> <li><img src="./imager/1.jpg" alt=""></li> </a> <a href=""> <li><img src="./imager/2.jpg" alt=""></li> </a> <a href=""> <li><img src="./imager/3.jpg" alt=""></li> </a> <a href=""> <li><img src="./imager/4.jpg" alt=""></li> </a> <a href=""> <li><img src="./imager/5.jpg" alt=""></li> </a> <a href=""> <li><img src="./imager/1.jpg" alt=""></li> </a> </ul> <span class="lf"></span> <span class="rg"></span> <div class="raidusYuan"> <span class="yuanS"></span> <span class=""></span> <span class=""></span> <span class=""></span> <span class=""></span> </div> </div> <script src="./js/index.js"></script> </body> </html> *{ padding: 0; margin: 0; text-decoration: none; list-style: none; } .lbbox{ width:980px; height:420px; margin: 80px auto; position: relative; overflow: hidden; } .oUl{ width: 9999999px; height:420px; position: absolute; top: 0; left: 0; } .oUl a{ display: block; width: 980px; height:420px; float: left; } .oLi a li img{ width: 980px; height:420px; } .lf,.rg{ width: 50px; height: 50px; position: absolute; background: black; text-align: center; font-weight: bold; line-height: 50px; font-size:30px; color: rgb(255, 255, 255); opacity: 0.4; cursor: pointer; } .lf{ left: 0; top:210px; } .rg{ right: 0; top:210px; } .yuanS{ background: black; } .raidusYuan{ width: 300px; height: 30px; position: absolute; left: 327px; top: 347px; } .raidusYuan span{ cursor: pointer; margin-left: 30px; height: 20px; border-radius: 50%; width: 20px; display: block; float: left; border: solid 1px rgb(255, 255, 255) } var timer = null; //创建定时器的开关 var sliderPage = document.getElementsByClassName('oUl')[0]; //获取ul标签 var moverWidth = sliderPage.children[0].offsetWidth; //获取一张轮播图的宽度 var num = sliderPage.children.length - 1; //获取所以轮播图的张数 var leftBtn = document.getElementsByClassName('lf')[0]; //获取左按钮 var rightBtn = document.getElementsByClassName('rg')[0]; //获取右按钮 var oSPan = document.getElementsByClassName('raidusYuan')[0].getElementsByTagName('span') //获取圆点 var key = true; //锁 var index = 0; //创建一个变量用来判断样式圆点在那个位置 function changeIndex(_index){ //给圆点添加样式函数 for(var i = 0; i < oSPan.length; i ++){ //获取每个圆点的位置 oSPan[i].className = ' '; //让当前所有的圆点的class变为空 } oSPan[_index].className = "yuanS" //让当前的index的值也就是当前轮播图圆点变为黑色。 } for(var i = 0; i < oSPan.length; i ++){ //给当前每一个圆点加点击事件 (function(i){ //会触发闭包,使用立即执行函数 oSPan[i].onclick = function(){ //添加事件 key = false; //将锁关上 clearTimeout(timer); //清楚定时器 index = i; //让当前的Index等于当前点击按钮对等轮播图的位置 startMove(sliderPage, {left: - index * moverWidth,},function(){ //starMove函数是dom运动函数,让当前ul的位置 减去点击的位置的数字* 宽度 key = true; //将锁打开 timer = setTimeout(autoMove,1500); //执行图片自己动 changeIndex(index) //改变圆点样式 }) } }(i)) } function autoMove(direction){ //轮播图自左向右自动运动 clearTimeout(timer) //清除定时器 if(key){ //先看锁开了没有,如果锁是关着的则不执行,防止两个定时器一起动发生冲突。 key = false; //将锁关闭 if(!direction || direction == "left->right"){ //如果当前的值是"left->right" index ++; //让index加一个值 startMove(sliderPage,{left : sliderPage.offsetLeft - moverWidth}, function () { //图片运动函数,让当前Ul的宽度减去初始的moveWidth宽度 if(sliderPage.offsetLeft == -num * moverWidth){ //如果越界了,当前Ul的宽度等于所有轮播图的张数的宽度 index = 0; //让圆点值等于1 sliderPage.style.left = '0px'; //让轮播图归位第一张 } changeIndex(index); //执行圆点样式 timer = setTimeout(autoMove,1500); //再一次执行自动轮播 key = true; //将锁打开 console.log(index) }) }else if(direction == "right->left"){ //如果点击是自右向左 if(sliderPage.offsetLeft == 0){ //先判断当前的Ul轮播图是不是第一张 sliderPage.style.left = - num * moverWidth + 'px'; //如果是让当前ul的宽度值直接等于所有轮播图的最后一张的宽度值 index = num; ///让圆点等于最后一张轮播图位置数字的值 } index --; //如果不是第一张就index --一个值 startMove(sliderPage,{left : sliderPage.offsetLeft + moverWidth,}, function () { //执行动画 changeIndex(index); //执行圆点样式 timer = setTimeout(autoMove,1500); //执行自动定时器 key = true; //让锁打开 }) } } } leftBtn.onclick = function(){ //给左按键添加点击事件 autoMove('right->left'); //传入参数自右向左 } rightBtn.onclick = function(){ //给右键添加点击事件 autoMove('left->right'); //传入参数自左向右 } setTimeout(autoMove,1500); //初始自动加载函数 //获取当前元素的class值的方法 function getStyle (dom, attr){ if(window.getComputedStyle){ return window.getComputedStyle(dom, null)[attr]; }else{ return dom.currentStyle[attr]; } } //动画方法,看之前的博客文章有写到 function startMove(dom, attrObj, callback) { clearInterval(dom.timer); var iSpeed = null, iCur = null; dom.timer = setInterval(function () { var bStop = true; for (var attr in attrObj) { if (attr == 'opacity') { iCur = parseFloat(getStyle(dom, attr)) * 100 } else { iCur = parseFloat(getStyle(dom, attr)); } iSpeed = (attrObj[attr] - iCur) / 7; 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; } } if(bStop) { clearInterval(dom.timer); typeof callback == 'function' && callback() } }, 30) }
    Processed: 0.015, SQL: 9