本当にボールの位置に基づいて何かをしたいのであれば、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();
}
}
});
});