ホームページ  >  記事  >  ウェブフロントエンド  >  jQueryのドロップダウンメニューでマウスオーバーとマウスアウトが繰り返しトリガーされる問題の解決策

jQueryのドロップダウンメニューでマウスオーバーとマウスアウトが繰り返しトリガーされる問題の解決策

黄舟
黄舟オリジナル
2017-06-28 13:21:492408ブラウズ

オンラインで見つかった解決策は、mouseenterイベントとmouseleaveイベントを変更することですが、変更した後もまだ機能しません。マウスをトリガー領域上でスライドさせると、ドロップダウン メニューが繰り返し表示され、非表示になります。

jQueryのドロップダウンメニューでマウスオーバーとマウスアウトが繰り返しトリガーされる問題の解決策

//purProduction为“购买产品”的id,showPurchase为下拉菜单的id
$("#purProduction").mouseenter(function() {
					$("#showPurchase").slideDown();					
				})
				$("#purProduction").mouseleave(function() {
					$("#showPurchase").slideUp();
				})
				$("#showPurchase").mouseenter(function(){
					$("#showPurchase").slideDown();
				})
				$("#showPurchase").mouseleave(function(){
					$("#showPurchase").slideUp();
				}) 				

<a class="name" id="purProduction" style="padding:20px;position:relative;left:1px;top:10px;">购买产品</a>

<div class="showDiv" id="showPurchase" style="position:absolute;left:595px;top:50px;">
			     <!-- 向上的箭头  -->
				<div class="outTri"></div>
				<div class="inTri"></div>


					<a class="item" style="display:block;font-size:15px;border-bottom:1px solid rgb(240,243,244)">查询价格</a>
					<a class="item" style="display:block;font-size:15px;border-bottom:1px solid rgb(240,243,244)">等级购买</a>
					<a class="item" style="display:block;font-size:15px;border-bottom:1px solid rgb(240,243,244)">经销商查询</a>
					<a class="item" style="display:block;font-size:15px;border-bottom:1px solid rgb(240,243,244)">合作加盟</a>

			</div>

あなたが言及した「繰り返しポップアップ」について
それは実際には次のようなものです: マウスを purProduction に移動すると、マウスが showPurchase に移動すると、この時点で purProduction のマウスエンターがポップアップします。もう一度言いますが、毛織物はどのようなイベントを引き起こしますか?まず、マウスが purProduction を離れ、mouseleave をトリガーし、次にマウスが showPurchase に入り、mouseenter をトリガーします。これは問題ありません。一度閉じて再度ポップアップするだけのようですが、イベントは途中でもトリガーされます。 slideDown プロセス。showPurchase が slideDown の場合。プロセス中に繰り返しマウスの近くを通過すると、マウス イベントが繰り返しトリガーされます...

解決策は簡単です。最善の方法は、このメカニズムを放棄してホバーを使用することです。もちろん、コードを保持することに非常に抵抗がある場合は、Interval を使用して定期的にチェックすることを検討する必要があります...このように (醜い書き方を責めないでください。実際、これは CSS でカスタマイズする必要があります)

//purProduction为“购买产品”的id,showPurchase为下拉菜单的id$("#showPurchase").slideUp();var show=false, showed=false;setInterval(function () {
  if (show && !showed) {
    $("#showPurchase").slideDown();
    showed=true;
  } else if (!show && showed) {
    $("#showPurchase").slideUp();
    showed=false;
  }}, 100);$("#purProduction").mouseenter(function() {
  show=true;})$("#purProduction").mouseleave(function() {
  show=false;})$("#showPurchase").mouseenter(function() {
  show=true;})$("#showPurchase").mouseleave(function(){
  show=false;})

それはあなたのイベントキューが原因です。これらはすべてマウスオーバーとマウスアウトです。スタイルを制御するには :hover を使用するか、前述のように stop メソッドを使用して前のイベントキューをクリアします。

ZhihuがStackOverflowになったように感じるのはなぜですか...

これは、マウスイベントが複数回トリガーされた後、ノードのアニメーションキューに複数のslideDownとslideUpが蓄積されるため、$('に変更されるためです#showPurchase' ).stop(true).slideDown() がうまくいくはずです。

2 つの方法
最初の方法は、ドロップダウン メニューとボタンをコンテナーに配置するだけです。実際には、hover() を使用することができます。エフェクトを追加する必要はありませんが、:hover を使用すると簡単です。
2 番目のタイプは、構造が変更されていない場合、実装が少し面倒です。通常、ツールチップは次のように実装されます。


以上がjQueryのドロップダウンメニューでマウスオーバーとマウスアウトが繰り返しトリガーされる問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。