適切

2017-10-06 6 views
0

を動作していないサイズ変更に呼び出される関数の内部状態、私は次のコードをお持ちの場合:ウィンドウ幅はI以来、992px未満である場合にのみ、このコードは、ドロップダウンclass`にopenクラスを追加します適切

var hoverList = function(){ 
    var width = $(window).width(); 
    console.log(width); 
    if(width > 992) { 
    $(".dropdown").mouseover(function() { 
     $(this).addClass('open'); 
    }); 

    $(".dropdown").mouseleave(function() { 
     $(this).removeClass('open'); 
    }); 
    } 
} 
//call function on load and page resize 
$(window).on('load', hoverList); 
$(window).on('resize', hoverList); 

ユーザーがデスクトップ上でメニューを移動し、モバイル上のナビゲーションのモバイル版をクリックするようにします。 992ピクセル以下のサイズでページをリフレッシュしてli要素にカーソルを移動してもナビゲーションが切り替わらない場合、このウィンドウのサイズを992ピクセルより大きくしてli要素を移動するとナビゲーションが切り替わります私が992未満に戻って里を拾うと、ナビゲーションがトグルします。何が起こっているのか分かりません。私はこれに似たいくつかの質問を見ましたが、助けにはなりませんでした。

ご協力いただきありがとうございます。

これらは私がfoudあまりにも他の条件を書いてみ

if condition always work inside $(window).resize function

Problem with function within $(window).resize - using jQuery

+2

あなたはイベントリスナーを設定したら、それが設定されています。あなたは 'else'の場合にそれらを削除するべきです。 – Xufox

+1

JavaScriptでこれを行う理由cssでmin-widthのメディアクエリを使うことができます:https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries – HMR

+0

@HMR 'open'クラスはブートストラップによって私に与えられているので、私はそれを要素に追加したいだけです。 – OmarAguinaga

答えて

1

より大きい場合に条件が唯一の私は、あなたがこのようにそれを行うためのより良いかもしれないと思う働いている場合が起こっている:

$(".dropdown").mouseover(function() { 
    if($(window).width() > 992) { 
     $(this).addClass('open'); 
    } 
}); 

$(".dropdown").mouseleave(function() { 
    if($(window).width() > 992) { 
     $(this).removeClass('open'); 
    } 
}); 

ただ、完全を期すために、あなたのコードは動作しませんでしたあなたがイベントリスナーを削除したことがないので、それを期待していました。したがって、イベントリスナーを追加するのに十分な大きさのウィンドウを作成し、それを望みたくないほど小さくすると、それを削除する必要があります。ここではそのイベントを削除するときに、私はすべてのイベントを離れて爆発しません(他のコードをまだリスナーが必要な場合があります)nampespacedイベントを使用した例である

var hoverList = function(){ 
    var width = $(window).width(); 
    console.log(width); 
    if(width > 992) { 
    $(".dropdown").on("mouseover.autoopen",function() { 
     $(this).addClass('open'); 
    }); 

    $(".dropdown").on("mouseleave.autoopen",function() { 
     $(this).removeClass('open'); 
    }); 
    }else{ 
    $(".dropdown").off("mouseleave.autoopen").off("mouseover.autoopen); 
    } 
} 
//call function on load and page resize 
$(window).on('load', hoverList); 
$(window).on('resize', hoverList); 
+0

これはうまくいきました。 – OmarAguinaga

+0

@OmarAguinaga完全性のために、あなたのコードがどのように機能するのかを追加しましたが、あまり効果的ではありません。ウィンドウのサイズ変更を何度も起動できます – HMR

1

を参考になっていなかった質問です。いただきました!幅が992

+0

何も起こりません、クリックしていないときのドロップダウンのデフォルトブートストラップ機能のみがホバリングします。 – OmarAguinaga

+1

@OmarAguinagaこれは良い答えです。イベントリスナーを追加すると、イベントリスナーを削除するまで削除されません。elseステートメントは、else else $( ".dropdown").off( "mouseover")です。 off( "mouseleave") ' – HMR

+0

あなたの答えは@HMRです。なぜなら最初の答えとあなたのコメントが私を助けてくれたからです。 – OmarAguinaga