09-JavaScript 定时器 往复动画、滚动动画示例

定时器
1、制作动画
2、异步操作(等一下再执行)
3、函数缓冲与节流

类型及语法:
setTimeout 只执行一次的定时器
clearTimeout 关闭只执行一次的定时器
setInterval 反复执行的定时器
clearInterval 关闭反复执行的定时器

var time1 = setTimeout(myalert,2000);
var time2 = setInterval(myalert,2000);
clearTimeout(time1);
clearInterval(time2);

function myalert(){
alert("ok!");
}

     <script>
         function myalert(){alert('ok!')}

         // 只执行一次的定时器,第一个参数是函数名,也可用匿名函数,第二个参数是时间,单位是毫秒,不写单位
         var time1 = setTimeout(myalert,1000)
         // 关闭定时器
         clearTimeout(time1)

         // 定义反复执行的定时器
         var time2 = setInterval(myalert,1000)
         // 关闭定时器
         clearInterval(time2)
     </script>

定时器动画:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload = function(){
            var abox = document.getElementById("box");
            ileft = 0;
            
            /* 

            var timer = setInterval(moving,30);

            function moving(){
                 ileft += 3;
                 abox.style.left = ileft + 'px';
             } 
             */

             var timer = setInterval(function(){
                ileft += 3;
                abox.style.left = ileft + 'px';

                if(ileft>700){
                    clearInterval(timer);
                }
             },30);

        }
    </script>
    <style>
        .box{
            width:200px;
            height:200px;
            background-color:gold;
            position:absolute; //盒子定位,left值才会生效,让定时器改变left值就生成动画
            left:0;
            top:100px;

        }
    </style>
</head>
<body>
    <div class="box" id="box"></div>
</body>
</html>

 

 往复运动动画示例

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Document</title>
    
    <script>
        window.onload = function(){
            var abox = document.getElementById("box");
            var ileft = 0;
            var speed = 3;

            var timer = setInterval(function(){
                ileft += speed;
                abox.style.left = ileft + 'px';

            if(ileft>700){speed = -3;}

            if(ileft<0){speed = 3}
            },30)
        }



    </script>
    
    <style>
        .box{
            width:200px;
            height:200px;
            background-color:gold;
            position: absolute;
            top:50px;
            left:0;
        }    
    
    </style>

 </head>
 <body>
     <div class="box" id="box"></div>
 </body>
 </html> 

 无缝滚动动画:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }

        .list_con{
            width:1000px;
            height:200px;
            border:1px solid #000;
            margin:10px auto 0;
            background-color:#f0f0f0;
            position:relative;
            overflow:hidden;
        }
        
        .list_con ul{
            list-style:none;
            width:2000px;
            height:200px;
            position: absolute;
            left:0;
            top:0;
        }
        
        .list_con li{
            width:180px;
            height: 180px;
            float:left;
            margin:10px 10px;
        }

        .btn_con{
            position:relative;
        }
        
        .left,.right{
            width:30px;
            height:30px;
            background-color:gold;
            position:absolute;
            left:100px;
            top:80px;
            font-size:30px;
            color:#000;
            text-align:center;
            cursor:pointer;
            border-radius:15px;
            opacity:0.5;
            line-height: 30px;
        }

        .left{
            
            left:100px;
            top:80px;
        }

        .right{
            
            left:1150px;
            top:80px;
        }

    </style>
    <script>
        window.onload = function(){
            var oDiv = document.getElementById("slide");
            var oUl = oDiv.getElementsByTagName("ul")[0];
            var iLeft = 0;
            var iSpeed = -2
            // 将ul里面的内容复制一份,整个ul里面包含了10个li:
            oUl.innerHTML = oUl.innerHTML + oUl.innerHTML;

            // 当ul向左滚动到第5个li时,瞬间将整个ul拉回到初始位置
            function moving(){
                iLeft += iSpeed;
                oUl.style.left = iLeft + 'px';

                if(iLeft<-1000){iLeft=0}
            }

            var timer = setInterval(moving,30);        

        }    

    </script>
</head>

<body>
    <div class="btn_con">
        <div class="left" id="btn01">&lt;</div>
        <div class="right" id="btn02">&gt;</div>
    </div>
    <div class="list_con" id="slide">
        <ul>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
        </ul>
    </div>
</body>
</html>

 无缝滚动动画改进,点击左边箭头向左滚动,点右边的向右滚动:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }

        .list_con{
            width:1000px;
            height:200px;
            border:1px solid #000;
            margin:10px auto 0;
            background-color:#f0f0f0;
            position:relative;
            overflow:hidden;
        }
        
        .list_con ul{
            list-style:none;
            width:2000px;
            height:200px;
            position: absolute;
            left:0;
            top:0;
        }
        
        .list_con li{
            width:180px;
            height: 180px;
            float:left;
            margin:10px 10px;
        }

        .btn_con{
            position:relative;
        }
        
        .left,.right{
            width:30px;
            height:30px;
            background-color:gold;
            position:absolute;
            left:100px;
            top:80px;
            font-size:30px;
            color:#000;
            text-align:center;
            cursor:pointer;
            border-radius:15px;
            opacity:0.5;
            line-height: 30px;
        }

        .left{
            
            left:100px;
            top:80px;
        }

        .right{
            
            left:1150px;
            top:80px;
        }

    </style>
    <script>
        window.onload = function(){
            var oDiv = document.getElementById("slide");
            var oBtn01 = document.getElementById("btn01");
            var oBtn02 = document.getElementById("btn02");


            // 通过标签获取元素,获取的选择集,加上下标才能获取到元素:
            var oUl = oDiv.getElementsByTagName("ul")[0];
            var iLeft = 0;
            var iSpeed = -2
            // 将ul里面的内容复制一份,整个ul里面包含了10个li:
            oUl.innerHTML = oUl.innerHTML + oUl.innerHTML;

            // 当ul向左滚动到第5个li时,瞬间将整个ul拉回到初始位置
            function moving(){
                iLeft += iSpeed;
                oUl.style.left = iLeft + 'px';

                if(iLeft<-1000){iLeft=0}
                // 当ul在起始位置向右滚动时,瞬间将整个ul拉回到往左的第5个ul的位置
                if(iLeft>0){iLeft = -1000}
            }

            var timer = setInterval(moving,30);    

            oBtn01.onclick = function(){iSpeed = -2;}
            oBtn02.onclick = function(){iSpeed = 2;}    

        }    

    </script>
</head>

<body>
    <div class="btn_con">
        <div class="left" id="btn01">&lt;</div>
        <div class="right" id="btn02">&gt;</div>
    </div>
    <div class="list_con" id="slide">
        <ul>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
        </ul>
    </div>
</body>
</html>

无缝滚动动画改进,鼠标放上去时动画暂停:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }

        .list_con{
            width:1000px;
            height:200px;
            border:1px solid #000;
            margin:10px auto 0;
            background-color:#f0f0f0;
            position:relative;
            overflow:hidden;
        }
        
        .list_con ul{
            list-style:none;
            width:2000px;
            height:200px;
            position: absolute;
            left:0;
            top:0;
        }
        
        .list_con li{
            width:180px;
            height: 180px;
            float:left;
            margin:10px 10px;
        }

        .btn_con{
            position:relative;
        }
        
        .left,.right{
            width:30px;
            height:30px;
            background-color:gold;
            position:absolute;
            left:100px;
            top:80px;
            font-size:30px;
            color:#000;
            text-align:center;
            cursor:pointer;
            border-radius:15px;
            opacity:0.5;
            line-height: 30px;
        }

        .left{
            
            left:100px;
            top:80px;
        }

        .right{
            
            left:1150px;
            top:80px;
        }

    </style>
    <script>
        window.onload = function(){
            var oDiv = document.getElementById("slide");
            var oBtn01 = document.getElementById("btn01");
            var oBtn02 = document.getElementById("btn02");


            // 通过标签获取元素,获取的选择集,加上下标才能获取到元素:
            var oUl = oDiv.getElementsByTagName("ul")[0];
            var iLeft = 0;
            var iSpeed = -2
            var iNowSpeed = 0;
            // 将ul里面的内容复制一份,整个ul里面包含了10个li:
            oUl.innerHTML = oUl.innerHTML + oUl.innerHTML;

            // 当ul向左滚动到第5个li时,瞬间将整个ul拉回到初始位置
            function moving(){
                iLeft += iSpeed;
                oUl.style.left = iLeft + 'px';

                if(iLeft<-1000){iLeft=0}
                // 当ul在起始位置向右滚动时,瞬间将整个ul拉回到往左的第5个ul的位置
                if(iLeft>0){iLeft = -1000}
            }

            var timer = setInterval(moving,30);    

            oBtn01.onclick = function(){iSpeed = -2;}
            oBtn02.onclick = function(){iSpeed = 2;}

            // 鼠标移入时,iSpeed = 0,用iNowSpeed记录原来的速度值
            oDiv.onmouseover = function(){
                iNowSpeed = iSpeed;
                iSpeed = 0}
            //鼠标移开时,    恢复原来速度:
            oDiv.onmouseout = function(){
                iSpeed = iNowSpeed;
            }

        }    

    </script>
</head>

<body>
    <div class="btn_con">
        <div class="left" id="btn01">&lt;</div>
        <div class="right" id="btn02">&gt;</div>
    </div>
    <div class="list_con" id="slide">
        <ul>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/goods02.jpg" alt=""></a></li>
        </ul>
    </div>
</body>
</html>

 

posted @ 2019-03-19 16:21  greenfan  阅读(214)  评论(0)    收藏  举报