1. 程式人生 > >setInterval多組定時器函數封裝傳參

setInterval多組定時器函數封裝傳參

set blog tco 定時 tar 運行 top 並且 需要

昨天的例子是針對只有單個函數運行的結果,但是實際中可能會有多組函數這樣同時進行,那麽這個時候就要對函數進行封裝傳參,來實現效果了。就還拿昨天的例子來說吧,昨天寫的例子實現的效果是點擊按鈕,讓div向前移動,那麽今天就擴展一下,點擊按鈕讓div向後移動,想要實現這個效果,就必須要傳參了,來看代碼:

css代碼
<style>
#box{width:50px;height:50px;background:#ff6b0e;position: absolute;top:50px;left:50px;}
</style>

html代碼
</head>
<body>
<
input id="btn1" type="button" value="向前"/> <input id="btn2" 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 aBtn1=document.getElementById("btn1"); var aBtn2=document.getElementById("btn2"); var oBox=document.getElementById("box"); aBtn1.onclick=function(){ fn(oBox,18,500) }; aBtn2.onclick=function(){ fn(oBox,-18,10) };
//以上參數的區別是dir一個大於0,一個小於0,所以下面可以針對符號做判斷 //大於和小於這些符號是不能當參數被傳的 function fn(obj,dir,target){ clearInterval(obj.timer);//這裏先要清除一下定時器是為了防止一直點擊按鈕,div一直加速 //開啟定時器,假定讓其等於500的時候,停止下來 obj.timer=setInterval(function(){ var speed=parseInt(getStyle(obj,"left")) + dir; if( speed > target && dir>0){//這裏要做判斷大於目標數並且dir為大於0的數 speed = target } if( speed < target && dir<0){//這裏要做判斷小於目標數並且dir為小於0的數 speed = target } obj.style.left= speed +"px"; if( speed == target){ clearInterval(timer) } },50) } }; </script>

其實這個例子是很簡單的,但是需要註意的細節是符號是不能向參數一樣被傳的,所以就要做判斷,因為有大量相同的代碼。那麽就把共通的可以專門提出來卸載函數裏,然後將可變化的值設定為參數來傳遞即可。這是比較通俗的說法,當然可能用語上會不太準確,但是能明白就行,也歡迎大神指出!

好了,今天就這樣了!

setInterval多組定時器函數封裝傳參