2017-12-20 29 views
0

2つの状態を念頭に置いてメニューを作っています - 1025px以上のサイズで、ドロップダウンサブメニューはホバーして開きます反対側の1025px未満のサイズでは、サブメニューがクリックされて開きます。問題は後者の場合、ブラウザのサイズを1025px以下に変更してもホバリング機能が有効になり、ブラウザをリフレッシュした後でクリック機能が有効になり、ブラウザのサイズを1025pxサイズにしてからもう一度1025pxサイズでサイズを変更します。

私はいくつかの助けに感謝します。
おかげで、ブラウザは、あなただけのたびに多くのイベントハンドラを追加しているサイズを変更したときにあなたは決して古いイベントハンドラを削除していないしているウィンドウのサイズ変更後のjQueryのホバー機能をクリック機能に変更できません

$(function() { 
 
    var isMobile = false; 
 
    $(window).resize(function() { 
 
    if ($(window).width() >= 1025) { 
 
     isMobile = false; 
 
     $('nav li').hover(
 
     function() { 
 
      $('ul', this).stop().slideToggle(150); 
 
     }); 
 
    } else { 
 
     isMobile = true; 
 
     $("nav li").click(function() { 
 
     $('ul', this).stop().slideToggle(150); 
 
     }); 
 
    }; 
 
    }); 
 
    $(window).resize(); // Trigger window resize to check on load 
 
});
@import url(https://fonts.googleapis.com/css?family=Roboto:400,700,500); 
 

 
/* main Styles */ 
 

 
html { 
 
    box-sizing: border-box; 
 
} 
 

 
*, 
 
*:before, 
 
*:after { 
 
    box-sizing: inherit; 
 
} 
 

 
body { 
 
    background: #fafafa; 
 
    font-family: "Roboto", sans-serif; 
 
    font-size: 14px; 
 
    margin: 0; 
 
} 
 

 
a { 
 
    text-decoration: none; 
 
} 
 

 
.container { 
 
    width: 1000px; 
 
    margin: auto; 
 
} 
 

 
h1 { 
 
    text-align: center; 
 
    margin-top: 150px; 
 
} 
 

 

 
/* Navigation Styles */ 
 

 
nav { 
 
    background: #2ba0db; 
 
} 
 

 
nav ul { 
 
    font-size: 0; 
 
    margin: 0; 
 
    padding: 0; 
 
    display: block; 
 
} 
 

 
nav ul li { 
 
    display: block; 
 
    width: 100%; 
 
} 
 

 
nav ul li a { 
 
    color: #fff; 
 
    display: block; 
 
    font-size: 14px; 
 
    padding: 15px 14px; 
 
    transition: 0.08s linear; 
 
} 
 

 
nav ul li:hover { 
 
    background: #126d9b; 
 
} 
 

 
nav ul li ul { 
 
    display: none; 
 
    border-bottom: 5px solid #2ba0db; 
 
} 
 

 
nav ul li ul li { 
 
    border-top: 1px solid #444; 
 
    display: block; 
 
} 
 

 
nav ul li ul li:first-child { 
 
    border-top: none; 
 
} 
 

 
nav ul li ul li a { 
 
    background: #373737; 
 
    display: block; 
 
    padding: 10px 14px; 
 
} 
 

 
nav ul li ul li a:hover { 
 
    background: #126d9b; 
 
} 
 

 
nav .fa.fa-angle-down { 
 
    margin-left: 6px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<nav> 
 
    <div class="container"> 
 
    <ul> 
 
     <li><a href="#">Home</a></li> 
 
     <li><a href="#">About Us</a></li> 
 
     <li> <a href="#">Categories<i class='fa fa-angle-down'></i></a> 
 
     <ul> 
 
      <li><a href="#">Category One</a></li> 
 
      <li><a href="#">Category Two</a></li> 
 
      <li><a href="#">Category Three</a></li> 
 
     </ul> 
 
     </li> 
 
     <li> <a href="#">Services<i class='fa fa-angle-down'></i></a> 
 
     <ul> 
 
      <li><a href="#">Service One</a></li> 
 
      <li><a href="#">Service Two</a></li> 
 
      <li><a href="#">Service Three</a></li> 
 
      <li><a href="#">Service Four</a></li> 
 
      <li><a href="#">Service Five</a></li> 
 
      <li><a href="#">Service Six</a></li> 
 
     </ul> 
 
     </li> 
 
     <li><a href="#">Contact Us</a></li> 
 
    </ul> 
 
    </div> 
 
</nav>

答えて

1


CP。これらのイベントのいずれかが発生すると、すべてのハンドラが実行されます。

.resize()ハンドラ内でイベントハンドラをバインドするのではなく、それらを一度バインドして、isMobile変数をチェックして何かを行うかどうかを決定させます。

$(function() { 
 
    var isMobile = false; 
 
    $('nav li').hover(function() { 
 
    if (!isMobile) { 
 
     $('ul', this).stop().slideToggle(150); 
 
    } 
 
    }).click(function() { 
 
    if (isMobile) { 
 
     $('ul', this).stop().slideToggle(150); 
 
    } 
 
    }); 
 
    $(window).resize(function() { 
 
    isMobile = $(window).width() < 1025; 
 
    }); 
 
    $(window).resize(); // Trigger window resize to check on load 
 
});
@import url(https://fonts.googleapis.com/css?family=Roboto:400,700,500); 
 

 
/* main Styles */ 
 

 
html { 
 
    box-sizing: border-box; 
 
} 
 

 
*, 
 
*:before, 
 
*:after { 
 
    box-sizing: inherit; 
 
} 
 

 
body { 
 
    background: #fafafa; 
 
    font-family: "Roboto", sans-serif; 
 
    font-size: 14px; 
 
    margin: 0; 
 
} 
 

 
a { 
 
    text-decoration: none; 
 
} 
 

 
.container { 
 
    width: 1000px; 
 
    margin: auto; 
 
} 
 

 
h1 { 
 
    text-align: center; 
 
    margin-top: 150px; 
 
} 
 

 

 
/* Navigation Styles */ 
 

 
nav { 
 
    background: #2ba0db; 
 
} 
 

 
nav ul { 
 
    font-size: 0; 
 
    margin: 0; 
 
    padding: 0; 
 
    display: block; 
 
} 
 

 
nav ul li { 
 
    display: block; 
 
    width: 100%; 
 
} 
 

 
nav ul li a { 
 
    color: #fff; 
 
    display: block; 
 
    font-size: 14px; 
 
    padding: 15px 14px; 
 
    transition: 0.08s linear; 
 
} 
 

 
nav ul li:hover { 
 
    background: #126d9b; 
 
} 
 

 
nav ul li ul { 
 
    display: none; 
 
    border-bottom: 5px solid #2ba0db; 
 
} 
 

 
nav ul li ul li { 
 
    border-top: 1px solid #444; 
 
    display: block; 
 
} 
 

 
nav ul li ul li:first-child { 
 
    border-top: none; 
 
} 
 

 
nav ul li ul li a { 
 
    background: #373737; 
 
    display: block; 
 
    padding: 10px 14px; 
 
} 
 

 
nav ul li ul li a:hover { 
 
    background: #126d9b; 
 
} 
 

 
nav .fa.fa-angle-down { 
 
    margin-left: 6px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<nav> 
 
    <div class="container"> 
 
    <ul> 
 
     <li><a href="#">Home</a></li> 
 
     <li><a href="#">About Us</a></li> 
 
     <li> <a href="#">Categories<i class='fa fa-angle-down'></i></a> 
 
     <ul> 
 
      <li><a href="#">Category One</a></li> 
 
      <li><a href="#">Category Two</a></li> 
 
      <li><a href="#">Category Three</a></li> 
 
     </ul> 
 
     </li> 
 
     <li> <a href="#">Services<i class='fa fa-angle-down'></i></a> 
 
     <ul> 
 
      <li><a href="#">Service One</a></li> 
 
      <li><a href="#">Service Two</a></li> 
 
      <li><a href="#">Service Three</a></li> 
 
      <li><a href="#">Service Four</a></li> 
 
      <li><a href="#">Service Five</a></li> 
 
      <li><a href="#">Service Six</a></li> 
 
     </ul> 
 
     </li> 
 
     <li><a href="#">Contact Us</a></li> 
 
    </ul> 
 
    </div> 
 
</nav>

+0

非常に良いアドバイスを、私は心の中でそれを維持します。ありがとうございました – catapultedplastic

関連する問題