作为一名前端工程师,手写轮播图应该是最基本掌握的技能,以下是我自己原生js写的轮播,欢迎指点批评:
首先css代码
代码如下 | 复制代码 |
a{text-decoration:none;color:#3DBBF5;} *{ margin:0; padding:0; } .wrapper{ width:400px; height:300px; margin:100pxauto; } #lunbo{ position:relative; overflow:hidden; } #list{ position:relative; white-space:nowrap; // 这块用行元素模拟,所以才用该属性,块元素可修改这块 } #list span{ display: inline-block; width:400px; height:300px; text-align:center; line-height:300px; font-weight:bold; font-size:100px; color:#fff; } #buttons{ position:absolute; bottom:0; text-align:center; width:100%; height:40px; line-height:40px; } #buttons span{ display: inline-block; width:15px; height:5px; background:#fff; margin:010px; cursor:pointer; transition:all.5s; } #buttons span.on{ height:20px; } .arrow{ position:absolute; top:50%; transform: translateY(-50%); font-size:80px; font-weight:bold; color:#fff; opacity: .3; transition:all.5s; } .wrapper:hover .arrow{ opacity:1; } #prev{ left:10px; } #next{ right:10px; } |
然后HTML代码
代码如下 | 复制代码 |
|
最后js代码
代码如下 | 复制代码 |
window.onload=function() { varlunBo = document.getElementById("lunbo"); varlist = document.getElementById("list"); varbtn = document.getElementById("buttons").getElementsByTagName('span'); varprev = document.getElementById("prev"); varnext = document.getElementById('next'); varinterval = 3000; vartimer; varindex = 1; varanimated =false; for(vari=0;i btn[i].onclick=function() { if(this.className=='on')//如果是状态按钮直接返回节约资源 { return }; varmyIndex =parseInt(this.getAttribute('index'));//获取按钮的index属性值 varoffset = -400*(myIndex-index);//根据属性值 计算偏移量 animate(offset) //轮播动画 index = myIndex;// 改变索引值 showBtn(); //显示状态按钮 } } functionshowBtn () { for(vari=0;i btn[i].className='' } btn[index-1].className='on' } prev.onclick=function() {//上一页事件 if(animated) {//如果是动画状态 直接返回解决bug return; } if(index==1) { index =btn.length; }else{ index-=1; } animate(400); showBtn(); } next.onclick=function() { if(animated) { return; } if(index==btn.length) { index =1; }else{ index+=1; } animate(-400); showBtn(); } functionanimate(offset) { animated =true;//表示在动画状态 varnewLeft = parseInt(list.style.left) + offset;//计算新的left值 vartime = 400;//设置动画总时间 varinterval = 10;//动画帧时间 varspeed = offset/(time/interval);//每帧运动距离 functiongo () { if((speed>0 && parseInt(list.style.left) list.style.left = parseInt(list.style.left) + speed +'px' setTimeout(go,interval) }else{ animated =false;//动画状态结束 list.style.left = newLeft +'px'//现在的位移 if(parseInt(list.style.left)<-2000) {// 辅助假图 list.style.left = -400 +'px' }elseif( parseInt(list.style.left)>-400){ list.style.left = -2000 +'px' } } } go(); } functionplay () { timer = setTimeout(function() { next.onclick(); play(); },interval) } play(); functionstop () { clearTimeout(timer); } lunBo.onmouseover=stop; lunBo.onmouseout=play; } |
以上是所有代码,欢迎指点交流!
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔