js特效系列-1定时器的使用

定时器的使用:setInterval与setTimeout的区别
setInterval(函数,时间间隔)  每隔一段时间执行一下函数动作,且如果不关闭定时器将一直执行下去
setTimeout(函数,时间间隔)  隔一段时间执行一下函数动作,不过只执行一次。一次过后将不再执行。
如:
 setInterval(function(){
    alert("a");
},1000)  每隔一秒会弹出alert("a")
 setTimeout(function(){
    alert("a");
},1000)  过一秒后会弹出alert("a") 但弹出之后将不再弹出。也就是说setTimeout只执行一次做延迟操作。

案例:时间图片滚动特效:

  

 <body>
        <div id="test" >
            <img src="images/1.png" />
            <img src="images/1.png" />
            <img src="images/2.png" />
            <img src="images/3.png" />
            <img src="images/4.png" />
            <img src="images/5.png" />
        </div>
        <script type="text/javascript">
            //该函数用于时分秒做处理,未满十在前面自动加0
            function trans(value){
                if(value<10){
                    return "0"+value;
                }else{
                    return ""+value;
                }
            }
            function time(){
                var date=new Date();
                var hours=date.getHours();
                var minutes=date.getMinutes();
                var seconds=date.getSeconds();
                //var string="114125";
                var string=trans(hours)+trans(minutes)+trans(seconds);
                var images=document.getElementsByTagName("img");
                for(var i=0;i<images.length;i++){
                    images[i].src="images/"+string[i]+".png";
                }
            }
            setInterval(time,1000);
            //调用time()函数解决页面加载时显示本地时间问题
            time();
        </script>
    </body>



clearInterval(setInterval句柄)与clearTimeout(setTimeout句柄)函数分别用于清除设置的定时器
charAt方法得到字符串指定索引的值:string="absc" ; string.charAt(1)得到的是b

案例:setTimeout与clearTimeout的使用
 延时效果

<html>
    <head>
        <title>argument的使用</title>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <style type="text/css">
            #div1{
                100px;
                height:50px;
                background:blue;
                float:left;
                margin-right:20px;
            }
            #div2{
                200px;
                height:100px;
                background:red;
                float:left;
                display:none;
            }
        </style>
    </head>
    <body>
        <div id="div1">
            
        </div>
        <div id="div2">
            
        </div>
        <script type="text/javascript">
            //移动div1时div2显示出来,并延时显示,移出div2后消失
            var oDiv1=document.getElementById("div1");
            var oDiv2=document.getElementById("div2");
            var time=null;
            oDiv1.onmouseover=function(){
                clearTimeout(time);
                oDiv2.style.display="block";
            }
            oDiv1.onmouseout=function(){
                // 鼠标移动来的时候 延时0.5秒消失
                time=setTimeout(function(){
                    oDiv2.style.display="none";
                },500);
            }
            oDiv2.onmouseover=function(){
                //清除定时器,也就是让display为block
                clearTimeout(time);
                
            }
            oDiv2.onmouseout=function(){
                //设置定时器使display为none
                time=setTimeout(function(){
                    oDiv2.style.display="none";
                },500);
            }

            
        </script>
    </body>
</html>



案例:图片无缝滚动 offsetLeft/offsetTop/offsetWidth/offsetHeight
 offsetLeft为左边距

 <html>
    <head>
        <title>无缝轮播特效</title>
        <meta http-equiv="Content-Type" content="charset=utf-8"/>
        <style type="text/css">
            #div1{
                margin:50px auto;
                800px;
                height:200px;
                background:red;
                position:relative;
                overflow:hidden;
            }
            #div1 ul{
                border:solid 1px #ccc;
                margin-top:20px;
                800px;
                height:100px;
                position:absolute;
                float:left;

            }
            #div1 ul li{
                list-style:none;
                float:left;
                200px;
                height:100px;
                
            }
            #div1 ul li img{
                float:left;
                margin-left:0px;
                200px;
                height:100px;
            }
        </style>
    </head>
    <body>
        <a href="#" id="left">向左滚</a>
        <a href="#" id="right">向右滚</a>
        <div id="div1">
            <ul>
                <li><img src="images/zxy1.jpg"></li>
                <li><img src="images/zxy2.jpg"></li>
                <li><img src="images/zxy3.jpg"></li>
                <li><img src="images/zxy4.jpg"></li>
            </ul>
        </div>
        <script type="text/javascript">
             var oDiv1=document.getElementById("div1");
            var oUl=oDiv1.getElementsByTagName("ul")[0];
            var lis=oUl.getElementsByTagName("li");
            oUl.innerHTML+=oUl.innerHTML; //将图片拷贝一份用于轮播
            //ul的宽度等于
            oUl.style.width=lis[0].offsetWidth*lis.length+'px';
            var speed=2;
            var oA1=document.getElementById("left");
            var oA2=document.getElementById("right");
            //左滚
            oA1.onclick=function(){
                speed=-2;
            }
            //右滚
            oA2.onclick=function(){
                speed=+2;
            }
            //移动函数
            function move(){
                //左移(即oUl.offsetLeft-2) 当图片往左边移动到一半的时候重新UL左边距设置为0
                 if(oUl.offsetLeft<-oUl.offsetWidth/2){
                     oUl.style.left=0;
                 }
                 //右移(即oUl.offsetLeft+2) 如果图片往右边移动到超出左边的边界时将UL重新挪到左边来
                 if(oUl.offsetLeft>0){
                     oUl.style.left=-oUl.offsetWidth/2;
                 }
                 oUl.style.left=oUl.offsetLeft+speed+'px';
            }
             var timer=setInterval(move,30);
             //当鼠标移入UL的时候关闭定时器
             oUl.onmouseover=function(){
                 clearInterval(timer);
             }
             oUl.onmouseout=function(){
                 timer=setInterval(move,30);
             }
        </script>
    </body>
</html>
原文地址:https://www.cnblogs.com/luodao1991/p/3193920.html