zoukankan      html  css  js  c++  java
  • 轮播图系列—1带进度条效果的轮播图

    引言:最近在看一些轮播图的制作,各类轮播图真的是很有创意。咳咳,想起曾经自己做的轮播图,真是简单到拿不出手。不多说,直接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 知彼知己了解女性的全部教程。

  • 相关阅读:
    uboot如何检测XC2440是从Nand或Nor启动
    uboot中的快捷菜单的制作说明
    Android存储数据方式
    SharedPreferences详解
    (转载)Android理解:显式和隐式Intent
    使用 Fresco加载图片
    script "text/template"
    网页动画插件---Super Scrollorama , TweenMax 和skrollr
    Android控件之HorizontalScrollView 去掉滚动条
    android编程取消标题栏方法(appcompat_v7、Theme.NoTitleBar)
  • 原文地址:https://www.cnblogs.com/wxhhts/p/9535450.html
Copyright © 2011-2022 走看看