2011-01-16 12 views
-1

いくつかの親指でズームエフェクトを作成したいと思います。jQuery:ホバー(mouseleaveイベントは、マウスが子供の上にあるときに起動します)

は、ここに私のjavascriptの単純化されたコードです:

parent.hover(
function(){ 
    parent.stop().animate({/* css */}, inputZoomDuration, "linear"); 
    wrapper.stop().animate({/* css */}, inputZoomDuration, "linear"); 
    child.stop().animate({/* css */}, inputZoomDuration, "linear"); 
}, 
function(){ 
    alert("leave"); 
    child.stop().animate({/* css */}, 140, "linear"); 
    wrapper.stop().animate({/* css */}, 140, "linear"); 
    parent.stop().animate({/* css */}, 140, "linear"); 
} 
); 

とHTMLは次のようである:

<div parent> 
<div wrapper> 
    <div child> 

    </div> 
</div> 
</div> 

私はときに私 "親" の上にすべての私のdivのサイズを大きくします。しかし、すぐに私が子供の一人を(または離して)放置すると、警告が現れます。 アラートがなければ、結果は非常に不快なアニメーションになります。 子が大量に出たときにmouseleaveイベントが発生するのを防ぐ方法はありますか?

お礼、

ありがとうございます。

編集:http://userscripts.org/scripts/show/94786 とそれをテストするためのリンク:http://browse.deviantart.com/ 私たちは、私はオレンジ色のdivを離れるときmouseLeaveイベントは、この例とは異なり、trigerredされるコンソールで見ることができます:http://www.jsfiddle.net/wnuS6/3/ここ はGreasemonkeyのスクリプトです私が赤いdivを離れるときにイベントが発生しない場所。

+0

jQueryのどのバージョンを使用していますか?問題を再現する実際のコードを提供できますか? – user113716

+0

答えをありがとう。私はgreasemonkeyスクリプトでjquery(1.4.2)を使用します。 コードはややこしいです。私はそれを少しきれいにするとすぐにここに投稿しようとし、あなたが言うことをテストします。 – CronosS

+0

可能であれば、問題を再現する[jsFiddle](http://www.jsfiddle.net/)の例を作成します。 (左側の正しいライブラリを選択してください) – user113716

答えて

1

いくつかの調査の後、問題はgreasemonkeyから来ているようです。 jQueryのの

一部のバージョンはGreasemonkeyのサンドボックス内で を実行しません。ここで はウィキが言ったことです。 現在、1.3.2が動作しますが、 1.4.1は動作しません。動作するようにjQueryの1.4バージョンにパッチを適用することが可能である、 はjQueryのフォーラムを参照してください。GreasemonkeyのスクリプトにjQueryの 1.4.1をインポートするとエラーに

を生成しかし、jQueryののパッチを適用し、すべてのバージョン1.4.xにはまだ動作しません。 jsFiddleで同じスクリプトをテストし、jQuery 1.4.4で動作します)。

問題を解決するために、私は単純にjQuery 1.3.2を使用します(もちろん、自分のコードを少し修正する必要があります)。

2

イベントを.hover()から.mouseenter()に変更してください。これにより、mouseleave()イベントを使用して検出できる親div領域を離れるまで、アクティブになることが保証されます。 http://api.jquery.com/mouseenter/ - http://api.jquery.com/mouseleave/

+0

2人のハンドラを持つ 'hover'は' mouseenter/mouseleave'のショートカットです。 – user113716

+0

ホバーはマウスセンターとマウスリーブのショートカットですので、それを変更しても違いはありません。実際の問題は、イベントのバブリングにあります。 –

+0

@ Box9:バブルについては、mouseenter()とmouseleave()は、バブルしないMicrosoftの 'mouseenter/mouseleave'イベントをエミュレートするように設計されているため、解決しなければなりません。私は何か他のことが起こっていると思う。 – user113716

関連する問題