setInterval定時器設定開關


今天簡單寫一個小案例:點擊按鈕,讓div“走”起來。主要是為了說明給定時器設定開關時需要注意的幾個問題。需求是:當點擊按鈕,讓div向右一直移動,當移動到500像素時,停下來。好了那么簡單的布局代碼看一下:

css代碼
<style>
#box{width:50px;height:50px;background:#ff6b0e;position: absolute;top:50px;left:50px;}
</style>
html代碼
<body>
<input id="btn" type="button" value="按鈕"/>
<div id="box"></div>
</body>

那么簡單的js效果是這樣的:

<script>
    //兼容不同瀏覽器獲取行間樣式
    function getStyle ( obj, attr ) {
        return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj )[attr];
    }

    window.onload=function(){
        var aBtn=document.getElementById("btn");
        var oBox=document.getElementById("box");
        var timer=null;
        aBtn.onclick=function(){
            clearInterval(timer);//這里先要清除一下定時器是為了防止一直點擊按鈕,div一直加速

            //開啟定時器,假定讓其等於500的時候,停止下來
            timer=setInterval(function(){
                var speed=parseInt(getStyle(oBox,"left"))+18;

                if( speed > 500){//所以這里一定要讓其要大於500的時候等於500,這樣的話在給div賦值
                    speed = 500
                }

                oBox.style.left= speed +"px";

                //這里不能是大於500,否則有可能結果是508停下了,就不是要求的500
                if( speed == 500){
                    clearInterval(timer)
                }

            },50)

            };


    };
</script>

這里需要注意的幾個問題是:

第一,就是獲取div的樣式一定要用到getStyle,而它存在一定兼容性,其解決方案上面案例有寫到,這是通用的簡單寫法;

第二,就是若是讓div在等於一定值的情況下停下來的話,一定要想清楚它移動的單位長度能否被這個值除盡,若不能,那么就要先判斷當其大於這個值的時候要它先等於設定的這個值,然后再去賦值,給加條件讓其停止。

好了,上面的例子備注也很清楚了,當然這只是一個很簡單的小例子,若遇到類似的問題,一定要想到這些細節!希望對大家有幫助!今天就到這里!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM