我需要在相同類型的對象的方法中使用「setTimeout」的幫助。我使用此代碼來啓動我的對象:setTimeout在同一類型的多個對象的方法中
function myObject(param){
this.content = document.createElement('div');
this.content.style.opacity = 0;
this.content.innerHTML = param;
document.body.appendChild(this.content);
this.show = function(){
if(this.content.style.opacity < 1){
this.content.style.opacity = (parseFloat(this.content.style.opacity) + 0.1).toFixed(1);
that = this;
setTimeout(function(){that.show();},100);
}
}
this.hide = function(){
if(this.content.style.opacity > 0){
this.content.style.opacity = (parseFloat(this.content.style.opacity) - 0.1).toFixed(1);
that = this;
setTimeout(function(){that.hide();},100);
}
}
}
某處我有2個對象:
obj1 = new myObject('Something here');
obj2 = new myObject('Something else here');
某處在HTML代碼中,我使用它們:
<button onclick="obj1.show()">Something here</button>
<button onclick="obj2.show()">Something else here</button>
當用戶按下一個按鈕,一切都會好起來,但是如果用戶按下一個按鈕,並且在短時間間隔之後他按下另一個按鈕,則由第一個按鈕觸發的動作停止並且只有第二個按鈕的動作被執行編輯。 我知道全局變量「that」成爲第二個對象的引用,但我不知道如何創建一個不會阻止先前調用的方法的自動機制。
謝謝你提前和對不起我的英語,如果我犯了一些錯誤:P
那麼,但setTimeout還會返回一個句柄,您可以使用該句柄通過使用clearTimeout來取消呼叫。 https://developer.mozilla.org/en/window.clearTimeout – DanNsk
你知道,我不知道爲什麼,但在我所有使用JavaScript的年代中,我從來沒有找過這個 - 我一直使用間隔來取消可用性。 +1。無論哪種方式 - 同樣的概念適用。捕獲句柄,確保它在操作之外的作用域中可用,並在需要時使用句柄來取消。 – Brian