如果您真的想根据球的位置做某事,那么是的,step
这可能是最好的方法:
$('#ball').click(function() {
$(this).animate({
top: '+=210px'
}, {
duration: 500,
step: function() {
if($(this).offset().top > 208) {
crack();
}
}
});
});
演示:http: //jsfiddle.net/qJjnN/1/
现在,有几个警告:
- 可能会对性能造成影响。
- 每一步的位置不一定是整数,并且在开始和停止位置之间的每个像素处都不会存在对象。
step
不会在最终位置上调用,因此您实际上无法检查210
它是否是最终位置。
考虑到这些,您将无法检查 210px 的确切位置。相反,您将希望观察它何时通过某个位置并且仅crack
在该点触发,而不是之后的每个点:
$('#ball').click(function() {
var cracked = false;
$(this).animate({
top: '+=210px'
}, {
duration: 500,
step: function() {
if($(this).offset().top > 208 && !cracked) {
cracked = true;
crack();
}
}
});
});
演示:http: //jsfiddle.net/qJjnN/2/
该step
函数还具有参数now
,fx
可用于查看动画 css 的当前值。 step
被动画的每个 css 属性的每一步调用。因此,您必须小心使用它们,因为您需要查看fx
您正在查看的属性值(如果您正在制作多个动画,即top
和left
)。
$('#ball').click(function() {
var cracked = false;
$(this).animate({
top: '+=210px'
}, {
duration: 500,
step: function(now, fx) {
if(fx.prop != 'top') {
return;
}
if(now > 208 && !cracked) {
cracked = true;
crack();
}
}
});
});