本当にボールの位置に基づいて何かをしたいのであれば、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をアニメートしている場合)。topleft
$('#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();
}
}
});
});