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计时插件以及它们的魔法是如何工作的 。
我怀疑你能用这种方式做到这一点。 您需要推迟执行这些属性更改,这意味着您应将所述代码存储在各个函数中。