2015-04-30 62 views
0

我試圖拖延執行後續的行類似:延遲後續線上

//block of code 

if (//some condition) { 
    delay(1000) 
} 

//block of code 

我怎麼能這樣做?我試着用while循環是這樣的:

var del = 0 
setTimeOut(function(){del = 1}, 1000) 
while (del === 0) {console.log("waiting for 1 second");} 

卻引起瀏覽器崩潰。 那麼是否有一個聲明或方法或函數可以乾淨的方式做到這一點?

注意:我不想使用setTimeOut調用函數

或者是有什麼樣延遲動畫,如:

$("#editor img").on("mouseenter",slideInTag) 
       .delay(1000) 
       .on("mouseenter",slideOutTag); 
+1

沒有,沒有。你*有*使用帶有回調函數的'setTimeout'。 – Bergi

+0

爲什麼你不想使用'setTimeout'? – danguilherme

+2

'或者是否有像''動畫延遲':是的,你可以將'setTimeout'轉換成Promise,但這只是語法糖 – CodingIntrigue

回答

1

基於@Rahul特里帕蒂答案的評論。

this設置爲一個變量並使用變量而不是this

$(selector).on("mouseenter", function(){ 
    var x = this; 
    setTimeOut(function() {slideOutTag(x)}, 1000); 
}) 
+0

是的,這是繼續前進的方式! +1 –

0

有沒有辦法來阻止當前線程在JavaScript中。

+0

...因爲有在JavaScript沒有線程:-) – Bergi

+2

有一個單獨的線程,並有工人,是單獨的線程... – taxicala

+0

我更新了我的問題 –

1

簡短的答案,如果你不想使用settimeout那麼有NO方式來做到這一點。

+0

我更新了我的問題 –

+0

@RanaMallah: - 答案仍然是NO(*因爲RGraham說你可以使用承諾但會導致語法糖*)。順便說一句,你爲什麼不想使用setTimeOut? –

+0

因爲用setTimeOut你不能傳遞像這樣的參數 –

0

您需要使用setTimeOut。所以你的情況這將是:

$("#editor img").on("mouseenter", function(){ 
    setTimeout(function(){slideOutTag()},1000) 
} 

而且你必須定義一個slideOutTag功能,這將「的mouseenter」,並在一秒鐘後調用。

如果你想有間「時間分隔符」,則需要每次增加一個功能,我發現在這裏。

+0

'你需要使用setTimeOut'OP已經明確提到他不想使用setTimeOut –

+0

啊,這在第一個版本中沒有。那麼,祝你好運。 –