如何实现以下目标,了解如果只有一个延迟我可以使用setTimeout:
$(this).css().delay().css().delay().css();
答案 0 :(得分:4)
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中现有的动画队列设施一起玩。
答案 1 :(得分:3)
delay()
only works with animation,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);
});
你也可以把它变成一个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);
});
});
}
答案 2 :(得分:2)
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"});
答案 3 :(得分:1)
您仍然可以使用setTimeout。你只需要其中几个。
或者您可以.animate()
使用0
代替.css()
而不是$(this).animate({prop:'value'},0).delay(1000)
.animate({prop:'value'},0).delay(1000)
.animate({prop:'value'},0);
:
示例: http://jsfiddle.net/6sewU/
.animate()
请注意,如果您使用{{1}}设置颜色,则需要安装jQueryUI。