javascript setTimeout或jquery延迟 - 两者都不适合我

Cat*_*ish 6 javascript jquery delay settimeout

div喜欢这个

<div id="sale">
    ........
</div>
Run Code Online (Sandbox Code Playgroud)

我试着用这两个

$('#sale').delay(3000).slideDown(500);
Run Code Online (Sandbox Code Playgroud)

setTimeout(sale(), 3000);

function sale() {
    $('#sale').slideDown(500);
}
Run Code Online (Sandbox Code Playgroud)

但他们都没有工作.jQuery延迟说$('#sale').delay()不是一个函数,而setTimeout方式是无用的setTimeout调用(缺少引号).如果我在sale()通话中添加双引号,它只是说"销售没有定义".

为什么这些都不起作用?

我要做的就是在加载页面3秒后显示div.

Ivo*_*zel 15

如果setTimeout你只是做错了.

setTimeout(sale(), 3000); // will call sale and use the RETURN value in the callback but sale returns undefined
Run Code Online (Sandbox Code Playgroud)

你需要传递一个函数:

function sale() {
    $('#sale').slideDown(500);
}

setTimeout(sale, 3000); // just pass in the reference to sale()
Run Code Online (Sandbox Code Playgroud)

其他可能性:

// no difference in this case
// Note: if it were obj.sale() then you would need to do this version
//       otherwise sale() will get called with the this set to window
setTimeout(function(){sale()}, 3000) 
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要:

setTimeout(function() { $('#sale').slideDown(500); }, 3000);
Run Code Online (Sandbox Code Playgroud)


ale*_*lex 5

你需要排队等候delay()工作.

$('#sale').queue(function() {

   $(this).delay(3000).slideDown(500).dequeue();

});
Run Code Online (Sandbox Code Playgroud)

看见.

queue()如果您的下一个方法链是动画,Patrick Dw已经在评论中告知您不需要参与.看他的JSFiddle.

  • @alex - 你做得很好,但动画会自动添加到队列中.如果你在`.delay()`之后调用类似`.css()`的东西,则需要手动排队. (2认同)