这确实有延迟,但似乎直到最后才应用样式更改:
for (i=20;i>=0;i--) {
var boxShadow = i+"px "+i+"px "+i+"px #888";
$('article').css("box-shadow", boxShadow);
sleep(20);
}
function sleep(ms)
{
var dt = new Date();
dt.setTime(dt.getTime() + ms);
while (new Date().getTime() < dt.getTime());
}
这根本不适用延迟:
for (i=20;i>=0;i--) {
var boxShadow = i+"px "+i+"px "+i+"px #888";
$('article').delay(500).css("box-shadow", boxShadow);
}
使用css3过渡可以更轻松地完成吗?我只是在延迟样本中做了一些小的jquery错误吗?
感谢任何能提供帮助的人。
答案 0 :(得分:4)
您可以使用类和setTimeout
来为动画效果使用CSS3过渡:
CSS -
#some-element {
-webkit-transition : all 0.5s linear;
-moz-transition : all 0.5s linear;
-ms-transition : all 0.5s linear;
-o-transition : all 0.5s linear;
transition : all 0.5s linear;
}
#some-element.ani-state {
-webkit-box-shadow : 0 0 24px #000;
-moz-box-shadow : 0 0 24px #000;
box-shadow : 0 0 24px #000;
}
我因为Chrome而使用all
转换声明...某些版本的Chrome使用-webkit-box-shadow
而较新版本使用box-shadow
。如果您不更改元素的任何其他属性(或者如果您想要对这些属性更改进行动画处理),all
并不是什么大问题。
JS -
$(function () {
var $someElement = $('#some-element');
$someElement.on('click', function () {
$someElement.addClass('ani-state');
setTimeout(function () {
$someElement.removeClass('ani-state');
}, 500);
});
});
以下是演示:http://jsfiddle.net/jasper/tvfPq/1/
请注意,在演示中,我使用了两个box-shadows
:box-shadow : 0 0 24px #000, inset 0 0 24px #999;
答案 1 :(得分:2)
最近发布了一个jquery插件。走高峰:Shadowmation