zoukankan      html  css  js  c++  java
  • 轮播图--js课程

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                padding:0;
                margin:0;
            }
            ul,ol{
                list-style:none;
            }
            #demo{
                500px;
                height:200px;
                border:1px solid black;
                margin:100px auto;
                padding:3px;
                background-color: #ccc;
                position:relative;
            }
            #picbox{
                100%;
                height:100%;
                position: relative;
                overflow:hidden;
            }
            #picbox ul{
                position:absolute;
                3000px;
                height:200px;
            }
            #picbox ul li{
                float:left;
            }
            #demo ol{
                position:absolute;
                right:10px;
                bottom:10px;
                line-height:20px;
                text-align:center;
            }
            #demo ol li{
                float:left;
                20px;
                height:20px;
                background:#fff;
                border:1px solid #ccc;
                margin-left:10px;
                cursor:pointer
            }
            #demo ol .current{
                background-color: yellow;
            }
        </style>
        <script src="../my.js"></script>
    </head>
    <body>
        <div id="demo">
            <div id="picbox">
                <ul id="ul">
                    <li><img src="taobao/1.jpg" alt=""></li>
                    <li><img src="taobao/2.jpg" alt=""></li>
                    <li><img src="taobao/3.jpg" alt=""></li>
                    <li><img src="taobao/4.jpg" alt=""></li>
                    <li><img src="taobao/5.jpg" alt=""></li>
                </ul>
            </div>
        </div>
    </body>
    </html>
    <script>
        var demo=document.getElementById("demo");
        var picbox=document.getElementById("picbox");
        var ul=document.getElementById("ul");
        var ulkids=ul.children;
    
        ul.appendChild(ulkids[0].cloneNode(true)); //把ul中的第一张图片克隆添加到ul中去
    
        var ol=document.createElement("ol"); //demo里面添加ol
        demo.appendChild(ol);
    
        for(var i=0;i<ulkids.length-1;i++)  //ol里面添加li
        {
            var li=document.createElement("li");
            ol.appendChild(li);
            li.innerHTML=i+1;
        }
        ol.children[0].className="current";
    
        //动画效果
        var olkids=ol.children;
        for(var i=0;i<olkids.length;i++)
        {
            olkids[i].index=i;
            olkids[i].onmouseover=function () {
                for(var j=0;j<olkids.length;j++)
                {
                    olkids[j].className="";
                }
                this.className="current";
                run(ul,-this.index*500);//调用匀速运动动画封装函数,谁做动画,哪个方向移动多少
    
                pic=anniu=this.index;//鼠标碰到按钮上,都以当前的索引号为主
            }
        }
    
        //轮播图每隔1秒钟自动播放,设置定时器
        var timer=null;
        var pic=0;//控制播放张数
        var anniu=0;//控制播放按钮
        timer=setInterval(autoplay,1000);
        function autoplay()
        {
            pic++; //先加加
            if(pic>ulkids.length-1) //后判断,播放了5张图之后
            {
                ul.style.left=0; //迅速切到第1张
                pic=1;//然后从第2张开始播放 ,因为第6张就是第1张
            }
            run(ul,-pic*500);//再执行
    
    
            anniu++;//先加加
            if(anniu>olkids.length-1) //后判断 ,因为序列号从0到4,所以需要减一
            {
                anniu=0;
            }
            for(var i=0;i<olkids.length;i++)  //再执行
            {
                for(var j=0;j<olkids.length;j++)
                {
                    olkids[j].className="";
                }
                olkids[anniu].className="current"; //播放了0张,第0个按钮黄色,播放了1张,第1个按钮黄色
    
            }
        }
    
        //最后,鼠标经过大盒子,清除定时器,离开时又开始定时器
        demo.onmouseover=function () {
            clearInterval(timer);
        }
        demo.onmouseout=function () {
            timer=setInterval(timer);
        }
    
    
    
    
    
        //匀速运动动画封装函数
        function run(obj,target)
        {
            var speed=(target-obj.offsetLeft)>0 ?  10 : -10;  //用来判断应该往前走还是后退
            clearInterval(obj.timer);
            obj.timer=setInterval(function(){
                var result=target-obj.offsetLeft; //盒子距离目标位置的距离
                if(Math.abs(result)<=10) //盒子距离目标位置的距离在步长10以内时,说明到位置了,因为不会在10以内
                {
                    obj.style.left=target+"px";
                    clearInterval(obj.timer);
                }
                else{
                    obj.style.left=obj.offsetLeft+speed+"px";
                }
            },10)
        }
    
    </script>
    

      

    效果:1,轮播图要无缝滚动(处理:5张轮播图的最后再添加一张轮播图,即添加第一张图片放在最                  后)

          2,右下方的按钮跟随轮播图的滚动而滚动(pic=anniu=this.index,鼠标碰到按钮上,都以当                    前的索引号为主)

          3,自动播放,设置定时器。

    关键代码:

    1,布局:(5个按钮在js里面添加)

    <div id="demo">
        <div id="picbox">
               <ul>
                   <li><img src="taobao/5.jpg" alt=""></li>     
                   <li><img src="taobao/5.jpg" alt=""></li>     
                   <li><img src="taobao/5.jpg" alt=""></li>  
                   <li><img src="taobao/5.jpg" alt=""></li>  
                   <li><img src="taobao/5.jpg" alt=""></li>  
               </ul>   
        </div>    
    </div>

    2,把ul里面的第一张图片克隆添加到ul里面去

    ul.appendChild( ulkids[0],cloneNode(true));

    3,demo里面添加ol , 然后通过for循环添加 li ,并且第一个li 的当前样式--背景颜色是黄色

    var ol=document.createElement("ol");
    demo.appendChild(ol);
    for(var i=0;i<ulkids.length-1;i++)
    {
         var li=document.createElement("ll");
        ul.appendChild(li);
        li.innerHTML=i+1;
    }
    ol.children[0].className="current";

    4, 动画,首先实现效果:鼠标移动哪个按钮上方,哪个按钮就变成黄色背景,需要遍历所有按钮,然后利用排他思想让所有按钮失去背景而当前按钮黄色背景。

        当鼠标移动到第一个按钮,ul 的 left 值为0,移动到第二个按钮,left值减去一张图片的长度,依次,所以需要自定义当前按钮的索引号 index 属性,遍历所有按钮时,ul 的 left值就是当前索引号乘以一张图片的宽度的负值。

        最后,鼠标移动到当前按钮,要把当前按钮的索引号的值赋给pic和anniu

    var olkids=ol.children;
    for(var i=0;i<olkids.length;i++)
    {
       olkids[i].index=i;
       olkids[i].onmouseover=function(){
           for(var j=0;j<olkids.length;j++)
            {
                olkids[i].className="";
            }
            this.className="current";
            run(ul ,  -this.index*500);
            pic=anniu=this.index;
       }
    }

    5,轮播图每个一秒钟自动播放,设置定时器

         pic  控制播放张数

         anniu  控制播放按钮

        封装一个自动播放函数(图片播放和按钮播放,都是先++后判断再执行)

        注意图片的自动播放:播放到第5张之后(pic> ulkids.length-1) ,迅速切到第一张图片( ul.style.left=0), 然后从第二张图片开始播放,因为第一张已经播放过了(第六张就是第一张)

       注意按钮的自动播放:按钮播放到最后一个的判断是 if(anniu>olkids.length-1), 减一是因为序列号是从0到4,播放到最后一个按钮之后,又从第一个按钮开始播放(anniu=0) 。最后按钮播放的执行是通过排他思想.

    var timer=null;
    var pic=0;
    var anniu=0;
    timer=setInterval(autoplay,1000);
    function autoplay()
    {
       pic++;
       if(pic>ulkids.length-1)
       {
           ul.style.left=0;
           pic=1;
       }
       run(ul, -pic*500);
    
      anniu++;
      if(anniu>olkids.length-1)
      {
           anniu=0;
       }
      for(var i=0; i<olkids.length; i++)
      {
          for(var j=0; j<olkids.length;j++)
         {
             olkids[j].className="";
         }
         this.className="current";
      }
    }

    6, 最后一步,鼠标经过大盒子,清除定时器,取消自动播放,鼠标离开时自动播放又开始.

    demo.onmouseover=funciton()
    {
       clearInterval(timer);
    }
    demo.onmouseout=function(){
      timer.setInterval(timer);
    }
  • 相关阅读:
    泛型约束where条件的使用(可以通过类型参数动态反射创建实例)
    设计模式之java源码-工厂方法模式
    软件定义网络基础---OF-Config协议
    软件定义网络基础---OpenFlow协议
    软件定义网络基础---南向接口协议概述
    软件定义网络基础---OpenFlow流表
    软件定义网络基础---OpenFlow概述
    软件定义网络基础---SDN数据平面
    软件定义网络基础---SDN的核心思想
    MACVLAN虚拟网卡技术
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/11256641.html
Copyright © 2011-2022 走看看