引言:最近在看一些轮播图的制作,各类轮播图真的是很有创意。咳咳,想起曾经自己做的轮播图,真是简单到拿不出手。不多说,直接show code 看看进度条的轮播图的制作思路,让我们分析学习这个带进度条的轮播图制作:
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset='utf-8'> 5 <title>图片轮播</title> 6 <style> 7 *{margin:0;padding:0;} 8 .main{margin:20px auto;1224px;height:630px;position:relative;overflow:hidden;} 9 #imgwrap{position:absolute;top:0;left:0;99999px;height:500px;} 10 #imgwrap>img{float:left;} 11 12 .navswrap{position:absolute;bottom:0;left:0;1224px;height:167px;cursor:pointer;} 13 .nav{float:left;204px;height:167px;} 14 .navpic{204px;height:162px;background-position:right center;} 15 .nav0 .navpic{background-image:url(img/sbanner_00.png);} 16 .nav1 .navpic{background-image:url(img/sbanner_01.png);} 17 .nav2 .navpic{background-image:url(img/sbanner_02.png);} 18 .nav3 .navpic{background-image:url(img/sbanner_03.png);} 19 .nav4 .navpic{background-image:url(img/sbanner_04.png);} 20 .nav5 .navpic{background-image:url(img/sbanner_05.png);} 21 22 .prowrap{204px;height:5px;} 23 .pro{height:5px;0px;} 24 .nav0 .prowrap{background:#7b5596;} 25 .nav0 .pro{background:#49047a;} 26 .nav1 .prowrap{background:#83a2cc;} 27 .nav1 .pro{background:#13478f;} 28 .nav2 .prowrap{background:#e18e40;} 29 .nav2 .pro{background:#b94e00;} 30 .nav3 .prowrap{background:#47acab;} 31 .nav3 .pro{background:#00605f;} 32 .nav4 .prowrap{background:#c86c8c;} 33 .nav4 .pro{background:#a41a4a;} 34 .nav5 .prowrap{background:#9089d6;} 35 .nav5 .pro{background:#4a419e;} 36 </style> 37 </head> 38 <body> 39 <div class='main'> 40 <div id='imgwrap'> 41 <img src='img/banner_00.jpg'> 42 <img src='img/banner_01.jpg'> 43 <img src='img/banner_02.jpg'> 44 <img src='img/banner_03.jpg'> 45 <img src='img/banner_04.jpg'> 46 <img src='img/banner_05.jpg'> 47 </div> 48 <div class='navswrap'> 49 <div class='nav nav0' data-index='0'> 50 <div class='navpic'></div> 51 <div class='prowrap'> 52 <div class='pro'></div> 53 </div> 54 </div> 55 56 <div class='nav nav1' data-index='1'> 57 <div class='navpic'></div> 58 <div class='prowrap'> 59 <div class='pro'></div> 60 </div> 61 </div> 62 63 <div class='nav nav2' data-index='2'> 64 <div class='navpic'></div> 65 <div class='prowrap'> 66 <div class='pro'></div> 67 </div> 68 </div> 69 70 <div class='nav nav3' data-index='3'> 71 <div class='navpic'></div> 72 <div class='prowrap'> 73 <div class='pro'></div> 74 </div> 75 </div> 76 77 <div class='nav nav4' data-index='4'> 78 <div class='navpic'></div> 79 <div class='prowrap'> 80 <div class='pro'></div> 81 </div> 82 </div> 83 84 <div class='nav nav5' data-index='5'> 85 <div class='navpic'></div> 86 <div class='prowrap'> 87 <div class='pro'></div> 88 </div> 89 </div> 90 </div> 91 </div> 92 <script> 93 window.onload=function(){ 94 var picnum=6; //图片数量 95 var picwidth=1224;//图片总长 96 var picinterval=20;//????每次前进移动的间隔 97 var picduration=500;//持续时间 98 var prointerval=20;//每次前进移动的间隔 99 var produration=5000;//5秒走完进度条 100 var index=0; 101 var imgwrap=document.getElementById('imgwrap'); 102 var pros=document.getElementsByClassName('pro'); 103 var navs=document.getElementsByClassName('nav'); 104 //moveTo(imgwrap,-600,500,20); 105 106 progress(pros[index],produration,prointerval); 107 108 for(var i=0;i<navs.length;i++){ 109 navs[i].onclick=function(){ 110 index=this.dataset.index;//将大图的index通过data- 获取到 111 moveTo(imgwrap,-index*picwidth,picduration,picinterval); 112 } 113 } 114 115 //进度条函数 116 function progress(elem,duration,interval){ //进度条函数 117 var width=picwidth/picnum;//每个进度条长度 118 var cover=0; 119 var stepLength=width/(duration/interval);//每一步走的长度 120 var tempindex=index;//莫名其妙的index??向上查找,初始化0然后在循环中获得到点击的值 121 var step=function(){ 122 if(tempindex!==index){clearInterval(intervalId);elem.style.width='0px';}//点击切换是,index可能会改变,改变后与tempindex不一致,取消原进度条函数 123 if(cover+stepLength<width){ 124 elem.style.width=parseFloat(getStyle(elem,'width'))+stepLength+'px';//这里之所以用parseFloat是因为步长太小一次不到1,parseInt之后还是零不会再增长了 125 cover+=stepLength; 126 }else{ 127 elem.style.width='0px'; 128 clearInterval(intervalId); 129 index++;//大图序列+1 130 131 index=index%picnum;//当图片走到最后一张的时候,重置轮播,此时index==0 132 //alert(index); 133 moveTo(imgwrap,-index*picwidth,picduration,picinterval);//进度条执行完后执行图片切换函数 134 } 135 } 136 var intervalId=setInterval(step,interval); 137 } 138 //图片移动函数 139 function moveTo(elem,to,duration,interval){ 140 var currPos=parseInt(getStyle(elem,'left'));//获取当前的left值 141 var dis=Math.abs(to-currPos); 142 var symbol=(to-currPos)/dis;//取正负,控制图片转向(左还是右) 143 144 //alert(symbol); 145 146 var stepLength=dis/(duration/interval); //每走一次的长度(函数执行一次图片移动的长度) 147 var cover=0; 148 var step=function(){ 149 if(cover+stepLength<dis){ 150 elem.style.left=parseFloat(getStyle(elem,'left'))+stepLength*symbol+'px'; 151 cover+=stepLength; 152 }else{ 153 elem.style.left=to+'px'; 154 clearInterval(intervalId); 155 progress(pros[index],produration,prointerval);//图片切换函数执行完后执行进度条函数 156 } 157 } 158 var intervalId=setInterval(step,interval); 159 } 160 161 //获得元素的样式 162 function getStyle(elem,cssname){ 163 if(window.getComputedStyle){ 164 165 return window.getComputedStyle(elem)[cssname]; 166 }else{ 167 return elem.currentStyle[cssname]; 168 } 169 } 170 171 } 172 //函数主要分为三个部分,一个负责下面进度条,一个负责上面的大图动,另一个负责获取样式。 173 </script> 174 </body> 175 </html>
效果:下面的小图之下的进度条走完,上面的大图切换,当点击下面的小图时大图也切换到相应的小图,同时对用的小图进度条重置。
您可以: 点击这里查看效果
git教程:https://pan.baidu.com/s/1-DJIAi7rqV0zprnEJVW7zQ 提取码:fw2t
一拳超人第一季收藏:https://pan.baidu.com/s/1TL1N2VpfCN06ectJZ5Uimw 提取码:5cql
20个经典java项目附带源码:https://pan.baidu.com/s/1YcOjqRNkscirbJvDXL1VeA 提取码:ll59
2018年Vue2.X快速入门:https://pan.baidu.com/s/1D5MTeiTpvn01aP-F7iKLYQ 提取码:4ylv
程序员追女孩12招 https://www.sebigdata.com/carUsb_1201_6_10.html 附带10G精品教程,链接亲测有效。(皮了下,找女朋友要紧)
Vue 去哪网项目练习:https://pan.baidu.com/s/1AU0u0Z7aeDRvsT80P03gZQ 提取码:k1w6
我知女人心:https://www.sebigdata.com/carUsb_1201_5_10.html 知彼知己了解女性的全部教程。