あなたが本当にボールの位置に基づいて何かをしたい場合は、[はい、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の正確な位置を確認することはできません。デモ
$('#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
持った後代わりに、あなたはすべての点、それはその時点で特定の位置だけトリガーcrack
を通過するときに見ていないことになるでしょうアニメーション化されている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();
}
}
});
});
最初の提案はまさに私が欲しかったことでした! – EnigmaMaster