在jQuery中,如何在css()中使用多个delay()方法?
我怎样才能实现以下function,如果只有一个延迟我可以使用setTimeout:
$(this).css().delay().css().delay().css();
编辑:
改变的CSS值是非数字的。
jQuery“.delay()”API完全是关于“效果队列”的。 它实际上立即返回。
如果您没有动画CSS更改,唯一的方法是使用“setTimeout()”。
可能会让事情更愉快的一件事是将CSS更改构建到数组中:
var cssChanges = [ { delay: 500, css: { backgroundColor: "green", fontSize: "32px" }}, { delay: 1000, css: { backgroundColor: "blue", textDecoration: "underline" }}, { delay: 750, css: { position: "relative", marginLeft: "5px" }} ];
然后,您可以使用单个例程遍历具有所需延迟的列表:
function doChanges(cssChanges) { var index = 0; function effectChanges() { $('whatever').css(cssChanges[index].css); if (++index < cssChanges.length) { setTimeout(doChanges, cssChanges[index].delay); } } setTimeout(effectChanges, cssChanges[0].delay); }
如果你愿意,你可以将它变成一个插件,不过如果你打算这样做,最好弄清楚如何让你的插件与jQuery中现有的动画队列设施一起玩。
delay()
仅适用于动画 ,IIRC。
这对你有用:)
// Delay to CSS Properties var cssChanges = [ { delay: 500, css: { color: 'red' }}, { delay: 1500, css: { color: 'blue' }}, { delay: 500, css: { color: 'yellow' }} ]; var element = $('div'), lastDelay = 0; $.each(cssChanges, function(i, options) { lastDelay += parseInt(options.delay); setTimeout(function() { element.css(options.css); }, lastDelay); });
jsFiddle 。
更新
你也可以把它变成一个jQuery插件。
$.fn.delayCss = function(cssChanges) { $(this).each(function() { var element = $(this), lastDelay = 0; $.each(cssChanges, function(i, options) { lastDelay += parseInt(options.delay); setTimeout(function() { element.css(options.css); }, lastDelay); }); }); }
jsFiddle 。
css
不是效果,它马上发生。 如果你想在交错的时间进行多次css
更改, setTimeout
正是你想要的:
var $target = $("#target"); $target.css("color", "blue"); setTimeout(function() { $target.css("color", "red"); setTimeout(function() { $target.css("color", "green"); }, 500); }, 500);
实例
如果您正在尝试使用css
,那么您可以使用animate
代替(例如,数字属性而不是上面的颜色),那么如果您使用animate
代替css
,那么您的代码将会起作用。
$("#target") .animate({paddingLeft: "50px"}) .delay(500) .animate({paddingLeft: "25px"}) .delay(500) .animate({paddingLeft: "0px"});
实例
您仍然可以使用setTimeout。 你只需要其中几个。
或者你可以使用持续时间为0
而不是.css()
.animate()
.css()
:
示例: http : //jsfiddle.net/6sewU/
$(this).animate({prop:'value'},0).delay(1000) .animate({prop:'value'},0).delay(1000) .animate({prop:'value'},0);
请注意,如果您使用.animate()
设置颜色,则需要安装.animate()
。