首页 > 代码库 > 原生js-焦点图轮播
原生js-焦点图轮播
首先是html实现页面结构及主程序
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>基本动画-焦点图轮播</title> 6 <style type="text/css"> 7 #outer{ width:450px; height:230px; position:relative; margin:50px auto; background:pink; overflow:hidden;} 8 #inner{ width:2700px; height:230px; position:absolute; top:0px; left:0;} 9 #inner div{ width:450px; height:230px; float:left; line-height:230px; text-align:center; font-size:36px; font-weight:bold; color:#fff; background:red;}10 ul#btn{ margin:0; padding:0; list-style:none; position:absolute; bottom:15px; right:15px; height:30px; width:230px;}11 ul#btn li{ float:left; width:25px; margin-right:5px; height:25px; border:4px solid orange; border-radius:50%; font-size:24px; font-weight:bold; line-height:25px; text-align:center; background:#366; cursor:pointer; -webkit-user-select:none; }12 ul#btn li.current{ background:white;}13 </style>14 </head>15 16 <body>17 <div id="outer">18 <div id="inner">19 <div>111111111111</div>20 <div style="background:yellow; color:blue">222222222222</div>21 <div style="background:black;">333333333333</div>22 <div style="background:purple;">444444444444</div>23 <div style="background:blue;">555555555555</div>24 <div>111111111111</div>25 26 </div>27 <ul id="btn">28 <li class="current" >1</li>29 <li >2</li>30 <li >3</li>31 <li >4</li>32 <li >5</li>33 </ul>34 </div>35 </body>36 </html>37 <script src="move.js"></script>38 <script>39 var oLis=document.getElementById(‘btn‘).getElementsByTagName(‘li‘);40 var oInner=document.getElementById(‘inner‘);41 for(var i=0;i<oLis.length;i++){42 oLis.item(i).n=i;43 oLis.item(i).onclick=function(){44 move(oInner,"left",this.n*-450);45 }46 }47 var step=0;48 function autoMove(){49 if(step==oLis.length){//第六个图片对应是第一个li50 oLis.item(0).className="";51 }else{//正常情况下,step在累加之前,总是表示上一个LI的索引52 oLis.item(step).className="";53 }54 step++;55 if(step==oLis.length+1){//如果走到了第六张,则把坐标切换到第一张上来。56 //alert(1);//暂停一下,更能理解原理57 oInner.style.left=0;//切换坐标58 step=1; //然后再从第一张往第二张上走,所以让step=1;59 }60 if(step==5){//第5个索引(就是第六张)对应的是第一张DIV,所以这儿要做个判断61 oLis.item(0).className="current";62 }else{//正常情况下走到第几张,就让对应的li切换背景63 oLis.item(step).className="current";64 }65 move(oInner,"left",step*-450);66 }67 window.setInterval(autoMove,2000);68 </script>
接下来在move.js里实现辅助函数
1 function move(ele,attr,target,fnCallback){ 2 clearInterval(ele[attr+"timer"]); 3 function _move(){//闭包方法 4 var cur=css(ele,attr);//当前位置 5 var nSpeed=(target-cur)/10; 6 nSpeed=nSpeed>0?Math.ceil(nSpeed):Math.floor(nSpeed); 7 css(ele,attr,cur+nSpeed); 8 if(nSpeed===0){ 9 clearInterval(ele[attr+"timer"]); 10 ele[attr+"timer"]=null;11 if(typeof fnCallback=="function"){12 fnCallback.call(ele);13 //用call去执行fnCallback,则可以让fnCallback在运行的时候,里面的this关键字指向当前运动的这个元素 14 }15 //ele.style.backgroundColor="green";16 }17 }18 ele[attr+"timer"]=window.setInterval(_move,20); 19 }20 21 function css(ele,attr,val){//如果传两个参数,则是取值。三个参数,则赋值22 if(typeof val=="undefined"){23 try{24 return parseFloat(window.getComputedStyle(ele,null)[attr]);25 }catch(e){26 return parseFloat(ele.currentStyle[attr]);27 }28 }else if(typeof val=="number"){29 if(attr=="opacity"){30 ele.style.opacity=val;31 ele.style.filter="alpha(opacity="+val*100+")";32 }else{33 ele.style[attr]=val+"px";34 }35 } 36 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。