關(guān)于JS中setTimeout()無法調(diào)用帶參函數(shù)問題的解決方法
本文實例分析了JS中setTimeout()無法調(diào)用帶參函數(shù)問題的解決方法。分享給大家供大家參考,具體如下:
解決方法:重寫setTimeout() 方法,需要用到閉包函數(shù)。如下:
var _st = window.setTimeout; window.setTimeout = function(fRef, mDelay){ if (typeof fRef == 'function') { var argu = Array.prototype.slice.call(arguments, 2); var f = function(){ fRef.apply(null, argu); }; return _st(f, mDelay); } return _st(fRef, mDelay); }
有了這樣的改寫,用setTimeout()調(diào)用帶參函數(shù)的時候,就可以用如下的形式:
setTimeout(fun,10,param);
其中,fun 是被函數(shù);10為調(diào)用周期,單位是 毫秒;param是fun函數(shù)的參數(shù)。
另一種更為簡單的方法:
function moveing(id,target_x,target_y,t){ var ele = document.getElementById(id); //alert("divObject: "+ele) var xpos = parseInt(ele.style.left); //alert(ele.style.left) var ypos = parseInt(ele.style.top); if(xpos < target_x){ xpos++; } if(ypos < target_y ){ ypos++; } ele.style.left = xpos + "px"; ele.style.top = ypos + "px"; //被遞歸調(diào)用的函數(shù)本身,拼成字符串形式,注意第一個參數(shù)的引號 var repeat ="moveing('"+id+"',"+target_x+","+target_y+","+t+")"; var movment = setTimeout(repeat,t); }
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
關(guān)于JS Lodop打印插件打印Bootstrap樣式錯亂問題的解決方案
關(guān)于Lodop打印是個很牛逼的打印插件,但是打印Bootstrap的樣式的時候就容易錯亂,下面通過本文給大家分享下這方面的問題2016-12-12JavaScript創(chuàng)建閉包的兩種方式的優(yōu)劣與區(qū)別分析
這篇文章主要介紹了JavaScript創(chuàng)建閉包的兩種方式的優(yōu)劣與區(qū)別分析的相關(guān)資料,需要的朋友可以參考下2015-06-06