本文實例分析了JS中setTimeout()無法調用帶參函數問題的解決方法。分享給大家供大家參考,具體如下:
解決方法:重寫setTimeout() 方法,需要用到閉包函數。如下:
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()調用帶參函數的時候,就可以用如下的形式:
setTimeout(fun,10,param);
其中,fun 是被函數;10為調用周期,單位是 毫秒;param是fun函數的參數。
另一種更為簡單的方法:
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"; //被遞歸調用的函數本身,拼成字符串形式,注意第一個參數的引號 var repeat ="moveing('"+id+"',"+target_x+","+target_y+","+t+")"; var movment = setTimeout(repeat,t); }
更多關於JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。