jQuery中的myWait(ms)?

我想扩展$.fn对象,以便在我的jquery命令之间有一个延迟

像这个工作(和很长)的代码:

 $('.d').delay(1000).queue( function () { $(this).css('background-color', 'green'); $(this).dequeue(); }).delay(1000).queue(function () { $(this).css('background-color', 'red'); $(this).dequeue(); }); 

一个工作样本在这里: JSBIN

所以我尝试了这个:

我在jsbin的代码

 $.fn.myWait = function (ms) { return this.queue( function () { var _self = this; setTimeout(function () { $(_self).dequeue(); }, ms); }) }; 

调用:

 $('.d').myWait(1000).css('background-color', 'red').myWait(1000).css('background-color', 'green'); 

但它不起作用。

我究竟做错了什么 ?

ps 我确实阅读了这个类似的解决方案 ,但如果我删除动画部分并仅使用css,它也无法正常工作。

.css()不会在动画队列中排队,这就是为什么你需要将它放在第一个片段的回调中。 在第二个片段中,立即调用它(即使队列中有超时等待 – 就像你调用.delay() )。 相反,您需要使用零持续时间的.animate()调用。

为了允许您想要的语法,您需要更进一步。 看看jQuery计时插件以及它们的魔法是如何工作的 。

我怀疑你能用这种方式做到这一点。 您需要推迟执行这些属性更改,这意味着您应将所述代码存储在各个函数中。