2015-06-07 100 views
4

如何在延遲後添加類然後延遲另一個類?JQuery在延遲後添加一個類然後延遲另一個類

我似乎只能添加一個。

$(document).ready(function() { 
    $(".websites-container").delay(5000).queue(function() { 
      $(this).addClass("active"); 
    }); 

    $(".websites-container").delay(8000).queue(function() { 
      $(this).addClass("gone") 
    }); 
}); 
+0

凡位於此代碼?它是否在準備好的事件處理程序中? – JNYRanger

+0

對不起,你的意思是$(document).ready(function()? – MrThunder

+0

是的,這是在哪裏或是否在別處?也只是爲了確保我理解正確,第一個延遲事件觸發, t? – JNYRanger

回答

3

您需要在.queue()回調中調用.dequeue(),否則隊列中的以下項目永遠不會執行。

$(document).ready(function() { 
 
    $(".websites-container").delay(1000).queue(function() { 
 
      // I'm impatient. I shortened the times. 
 
      $(this).addClass("active").dequeue(); 
 
    }).delay(2000).queue(function() { 
 
      $(this).addClass("gone"); 
 
    }); 
 
});
.active {font-weight: bold} 
 
.gone {color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="websites-container">abc</div>

(這幾乎被@adeneo解決,以將離隊回調除外)。

+0

這對我有效。謝謝! – MrThunder

3

最有可能的問題是你正在使用jQuery的延遲功能不正確。看看參考這太問題:.delay() and .setTimeout()

因爲我們沒有用動畫或工作中已經存在的jQuery排隊,你應該在大多數情況下使用setTimeout

$(document).ready(function() { 
    window.setTimeout(function() { 
     $(".websites-container").addClass("active"); 
    }, 5000); 

    window.setTimeout(function() { 
     $(".websites-container").addClass("gone"); 
    }, 8000); 
}); 
+0

This是'.delay()'的一個有效用法。參見['.queue()'](http://api.jquery.com/queue/)獲取有關排隊定製函數的信息。 – Scimonster

+0

恐怕我得到一個錯誤在螢火蟲「window.setTimeOut不是一個函數」 – MrThunder

+0

@ rt840它是'setTimeout',用小寫字母O. – Scimonster