分享一个自己写的简单的自动轮播的的函数

我来讲解一下这个函数意思


首先传入的参数 :obj :即要改变translateX/Y的对象,dir :运动方向x或y

如   


        <ul>

           <li></li>

          <li></li>

        </ul>

要通过改变ul的位置来实现轮播

  var oUl=document.getElementsByTagName('ul')[0];

autoChange(oUl,'x')


 function autoChange (obj, dir) {
    var el = obj.children;                 //取到子级 ,li
    var length = el.length;             //获得li的长度

    var num = 0;
    var num2 = 0;
   var off=true;
    var translate = {
        x: 'translateX',                       //根据方向,改变对应的translate
        y: 'translateY',
    }
    clearInterval(obj.timer)              //因为很可能在多个地方调用,所以每次都要清除上一次

    var moveDis = 0;

    moveDis = (dir === 'x') ? el[0].offsetWidth : el[0].offsetHeight;            //根据方向,获得单个li的宽或高

    obj.timer = setInterval(function () {
        if (num === length - 1) {                                                               //当运动到最后一张时                            

               e[0].style.position='relative';                                                 //将第一张定位到最后,(此处若li的css属性有position:absolute时就忽略;)

                e[0].style.translate[dir]=  length * moveDis                                             
                num = 0;                                                                               //此时将num置为0;

                 off=true;

         } else {
            num++;
        }
        num2++;                                                                                    //若当移动到第length-1张后此时num2还加1,移动到第length张
        obj.style.transition = '0.6s';                                                       //   

         obj,style.translate[dir]=-num2*moveDis +'px';                           //移动ul
        obj.addEventListener('webkitTransitionEnd', function () {
            if (num === 0) {                                                                   //此时已经移动到第length张了,

                     if(off){

                            off=false;                                                          //因为后面的程序要改变obj的translate值,还会触发obj的webkitTransitionEnd事件,所以加个控制

                          obj.style.transition = '0s';                                             

                          obj.style.translate[dir]= 0;                                                //将obj 迅速拉回0       将transition置为0的意思时,ob才能迅速变为0;以至于肉眼看不出来

                         e[0].style.position='static';                                                

                         e[0].style.translate[dir]= 0;                                              //恢复第一张的定位
                         num2 = 0

                  }

              
            }
        })
    }, 5000)
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值