2016-05-16 16 views
0

navbarをやりたいですが、私はjQueryの初心者です。jQueryのサイズ変更可能なnavbar

解決策768px以上では、(CSSのメディアクエリを使用して)カーソルをホバーした後に開くメニューを作成しました。

一方、768px解像度以下では、クリック後(jQuery経由)に開くメニューを作成しました。ここで

コードです:

$(function() { 
 
    if ($(window).width() <= 768) { 
 

 
    $('ul').hide(); 
 

 
    $('.navb').click(function() { 
 
     $('.main').slideToggle(); 
 
     $('.main>li>ul').slideUp(); 
 
     $('.main>li>ul>li>ul').slideUp(); 
 
    }); 
 

 
    $('.sub-1').click(function() { 
 
     $('.main>li>ul').slideToggle(); 
 
     $('.main>li>ul>li>ul').slideUp(); 
 
    }); 
 

 
    $('.sub-2').click(function() { 
 
     $('.main>li>ul>li>ul').slideToggle(); 
 
    }); 
 
    } 
 
});
body { 
 
    background: gray; 
 
    font-size: 20px; 
 
} 
 
ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 
ul li { 
 
    background: darkkhaki; 
 
} 
 
@media (min-width: 768px) { 
 
    ul li { 
 
    width: 100px; 
 
    } 
 
} 
 
a, 
 
a:hover, 
 
a:focus, 
 
a:visited { 
 
    color: #000; 
 
    text-decoration: none; 
 
} 
 
a { 
 
    display: block; 
 
} 
 
a:hover { 
 
    background: orange; 
 
} 
 
.main { 
 
    text-align: center; 
 
} 
 
@media (min-width: 768px) { 
 
    .main > li { 
 
    vertical-align: top; 
 
    display: inline-block; 
 
    margin-left: -6px; 
 
    } 
 
    .main > li > ul { 
 
    display: none; 
 
    } 
 
    .main > li:hover > ul { 
 
    display: block; 
 
    } 
 
    .main > li > ul > li > ul { 
 
    display: none; 
 
    } 
 
    .main > li > ul > li:hover > ul { 
 
    display: block; 
 
    } 
 
    .main > li > ul > li { 
 
    position: relative; 
 
    } 
 
    .main > li > ul > li > ul { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 100px; 
 
    } 
 
} 
 
@media (max-width: 768px) { 
 
    .main > li:first-child { 
 
    border-top: 1px solid gray; 
 
    } 
 
} 
 
.navb { 
 
    background: darkkhaki; 
 
    height: 45px; 
 
    cursor: pointer; 
 
} 
 
.navb span { 
 
    float: right; 
 
    font-size: 35px; 
 
    margin: 5px 5px 0 0; 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="row"> 
 
    <div class="navb visible-xs"> 
 
     <span class="glyphicon glyphicon-menu-hamburger"></span> 
 
    </div> 
 
    <ul class="main"> 
 
     <li><a href="#">Link 1</a> 
 
     </li> 
 
     <li><a href="#">Link 2</a> 
 
     </li> 
 
     <li><a href="#" class="sub-1">Link 3<span class="glyphicon glyphicon-triangle-bottom"></span></a> 
 
     <ul> 
 
      <li><a href="#">Link 3.1</a> 
 
      </li> 
 
      <li><a href="#">Link 3.2</a> 
 
      </li> 
 
      <li><a href="#">Link 3.3</a> 
 
      </li> 
 
      <li><a href="#" class="sub-2">Link 3.4<span class="glyphicon glyphicon-triangle-right hidden-xs"></span><span class="glyphicon glyphicon-triangle-bottom hidden-sm hidden-md hidden-lg"></span></a> 
 
      <ul> 
 
       <li><a href="#">Link 3.4.1</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.2</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.3</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.4</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.5</a> 
 
       </li> 
 
      </ul> 
 
      </li> 
 
      <li><a href="#">Link 3.5</a> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
     <li><a href="#">Link 4</a> 
 
     </li> 
 
     <li><a href="#">Link 5</a> 
 
     </li> 
 
     <li><a href="#">Link 6</a> 
 
     </li> 
 
    </ul> 
 
    </div> 
 
</div>

問題は、私は以下768px幅すべてにウェブサイトを開いたときに素晴らしい作品が、それはない+後768pxにリサイズすることです。最初に768px + widthで開き、解像度を低くすると同じことが起こります。

jQueryにはresize()関数がありますが、これはお勧めできません。私の問題のための簡単な解決策があると確信していますが、私はそれを見つけられませんでした。どうすれば修正できますか?私を助けてください。私は誰かが私が望むnavbarのスクリプトへのリンクを与えることができるなら、私はまた勇気づけられます。

+0

すぎmin-widthメディアクエリで、いくつかのCSSを追加する必要があり、あなたの問題は何ですか?このような状況では、現実世界の状況に身を置く。メニューはモバイルで正常に機能していますか?デスクトップで正常に動作しますか?誰もあなたのページのサイズを変更して、メニューが壊れているかどうかを確認することはありません。誰もWebページを閲覧するときにブラウザのサイズを変更しません。 –

答えて

0

jsコードで少し間違いがありました。 if内のすべてのイベントハンドラを定義しました。何が起きるかは、初めてjsが実行され、ウィンドウの幅が768pxより大きい場合です。ifステートメントが失敗するため、ハンドラはあなたのエレメントに適用されません。今度は、768px未満のウィンドウのサイズを変更すると、使用したくないresize()イベントが使用されていないため、何も起こりません。

click()イベントハンドラ内でウィンドウの幅を確認するような操作を行うことができます。今あなたのul隠れているもう一つの問題があります。 をresize()イベントなしでjsで非表示にすることはできません。

が、CSSは、あなたがあなたの窓未満768pxのサイズを変更したときに今、それはあまりにもあなたのulタグを非表示になります

@media (max-width: 768px) { 
     .main > li:first-child { 
     border-top: 1px solid gray; 
     } 
    ul{ 
     display:none; 
    } 
    } 

ような何かを行うことができますカバーしました。それが正常に動作している場合

あなたも

@media (min-width: 768px) { 
    .main > li { 
    vertical-align: top; 
    display: inline-block; 
    margin-left: -6px; 
    } 
    .main > li > ul { 
    display: none; 
    } 
    .main > li:hover > ul { 
    display: block; 
    } 
    .main > li > ul > li > ul { 
    display: none; 
    } 
    .main > li > ul > li:hover > ul { 
    display: block; 
    } 
    .main > li > ul > li { 
    position: relative; 
    } 
    .main > li > ul > li > ul { 
    position: absolute; 
    top: 0; 
    left: 100px; 
    } 
//this new style is added here and used important so to get importance than jquery's own css 
    ul.main{ 
    display:block !important; 
    } 
} 

$(function() { 
 

 
    //$('ul').hide(); 
 

 
    $('.navb').click(function() { 
 
     if ($(window).width() <= 768) { 
 
     $('.main').slideToggle(); 
 
     $('.main>li>ul').slideUp(); 
 
     $('.main>li>ul>li>ul').slideUp(); 
 
     } 
 
    }); 
 

 
    $('.sub-1').click(function() { 
 
     if ($(window).width() <= 768) { 
 
     $('.main>li>ul').slideToggle(); 
 
     $('.main>li>ul>li>ul').slideUp(); 
 
     } 
 
    }); 
 

 
    $('.sub-2').click(function() { 
 
     if ($(window).width() <= 768) { 
 
     $('.main>li>ul>li>ul').slideToggle(); 
 
     } 
 
    }); 
 
});
body { 
 
    background: gray; 
 
    font-size: 20px; 
 
} 
 
ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 
ul li { 
 
    background: darkkhaki; 
 
} 
 
@media (min-width: 768px) { 
 
    ul li { 
 
    width: 100px; 
 
    } 
 
} 
 
a, 
 
a:hover, 
 
a:focus, 
 
a:visited { 
 
    color: #000; 
 
    text-decoration: none; 
 
} 
 
a { 
 
    display: block; 
 
} 
 
a:hover { 
 
    background: orange; 
 
} 
 
.main { 
 
    text-align: center; 
 
} 
 
@media (min-width: 768px) { 
 
    .main > li { 
 
    vertical-align: top; 
 
    display: inline-block; 
 
    margin-left: -6px; 
 
    } 
 
    .main > li > ul { 
 
    display: none; 
 
    } 
 
    .main > li:hover > ul { 
 
    display: block; 
 
    } 
 
    .main > li > ul > li > ul { 
 
    display: none; 
 
    } 
 
    .main > li > ul > li:hover > ul { 
 
    display: block; 
 
    } 
 
    .main > li > ul > li { 
 
    position: relative; 
 
    } 
 
    .main > li > ul > li > ul { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 100px; 
 
    } 
 
    ul.main{ 
 
    display:block !important; 
 
    } 
 
} 
 
@media (max-width: 768px) { 
 
    .main > li:first-child { 
 
    border-top: 1px solid gray; 
 
    } 
 
    ul{ 
 
    display:none; 
 
    } 
 
} 
 
.navb { 
 
    background: darkkhaki; 
 
    height: 45px; 
 
    cursor: pointer; 
 
} 
 
.navb span { 
 
    float: right; 
 
    font-size: 35px; 
 
    margin: 5px 5px 0 0; 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta name="viewport" content="width=device-width"> 
 
    <title>JS Bin</title> 
 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
</head> 
 
<body> 
 

 
<div class="container"> 
 
    <div class="row"> 
 
    <div class="navb visible-xs"> 
 
     <span class="glyphicon glyphicon-menu-hamburger"></span> 
 
    </div> 
 
    <ul class="main"> 
 
     <li><a href="#">Link 1</a> 
 
     </li> 
 
     <li><a href="#">Link 2</a> 
 
     </li> 
 
     <li><a href="#" class="sub-1">Link 3<span class="glyphicon glyphicon-triangle-bottom"></span></a> 
 
     <ul> 
 
      <li><a href="#">Link 3.1</a> 
 
      </li> 
 
      <li><a href="#">Link 3.2</a> 
 
      </li> 
 
      <li><a href="#">Link 3.3</a> 
 
      </li> 
 
      <li><a href="#" class="sub-2">Link 3.4<span class="glyphicon glyphicon-triangle-right hidden-xs"></span><span class="glyphicon glyphicon-triangle-bottom hidden-sm hidden-md hidden-lg"></span></a> 
 
      <ul> 
 
       <li><a href="#">Link 3.4.1</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.2</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.3</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.4</a> 
 
       </li> 
 
       <li><a href="#">Link 3.4.5</a> 
 
       </li> 
 
      </ul> 
 
      </li> 
 
      <li><a href="#">Link 3.5</a> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
     <li><a href="#">Link 4</a> 
 
     </li> 
 
     <li><a href="#">Link 5</a> 
 
     </li> 
 
     <li><a href="#">Link 6</a> 
 
     </li> 
 
    </ul> 
 
    </div> 
 
</div> 
 
</body> 
 
</html>

https://jsfiddle.net/p1ddnn99/

関連する問題