DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 關於JS中setTimeout()無法調用帶參函數問題的解決方法
關於JS中setTimeout()無法調用帶參函數問題的解決方法
編輯:關於JavaScript     

本文實例分析了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程序設計有所幫助。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved