jQueryでナビゲーションを作成しています。
上部にあるナビゲーションを固定表示、フッター前で非表示したいです。
どちらもできたのですが、最初に読み込んだときに、スクロールしていくと意図せぬ位置でナビゲーションが非表示になってしまします。
更新をするとナビゲーションが出現し、問題なくフッターで非表示になります。
何を追加すれば改善されるでしょうか。
よろしくお願いいたします。
現在のコードは下記です。
var $win = $(window), $main = $('#slick-box'), $header = $('header'), headerHeight = $header.outerHeight(), footerHeight = $('footer').outerHeight(), docmentHeight = $(document).height(), headerPos = $header.offset().top, fixedClass = 'is-fixed', hideClass = 'is-hide'; $win.on('load scroll', function() { var value = $(this).scrollTop(), scrollPos = $win.height() + value; if(window.matchMedia('(min-width:600px)').matches){ if ( value > headerPos ) { if ( docmentHeight - scrollPos <= footerHeight ) { $header.addClass(hideClass); } else { $header.removeClass(hideClass); } $header.addClass(fixedClass); $main.css('margin-top', headerHeight); } else { $header.removeClass(fixedClass); $main.css('margin-top', '0'); } } }); });
HTMLは以下です。
<html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1.0"> <meta name="Author" content="*******"/> <!-- jQuery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <title>****************</title> <style> header, header div#head { margin: 0; padding: 0; position: relative; top: 0; left: 0; width: 100%; background: #fff; } header div#head { display: flex; justify-content: flex-start; align-items: baseline; } header div#head h1.logo { margin: 0; padding: 10px; } header div#head p.top_title { margin: 0; padding: 0 20px; font-weight: bold; color: #3271a2; } @media screen and (max-width: 599px) { h1.logo { margin: 0; padding: 0; width: 40%; } h1.logo img { width: 100%; } p.top_title { margin: 0; padding: 0; } } @media screen and (min-width: 600px) and (max-width: 959px) { h1.logo { margin: 0; padding: 0; width: 40%; } h1.logo img { width: 100%; } p.top_title { margin: 0; padding: 0; } } header, header div#head { transition: .3s; } .is-fixed { position: fixed; top: 0; left: 0; z-index: 2; } .is-hide { transform: translateY(-100%); } </style> </head> <body> <header> <div id="head"> <h1 class="logo"><img src="" alt=""></h1> <p class="top_title"></p> </div> <div id="navToggle"> <div> <span></span> <span></span> <span></span> </div> </div> <nav id="main_nav"> <div class="header_nav_list"> <span><a href=""></a></span> </div> <div class="main_nav_list"> <span><a href="#cont_area01"></a></span> <span><a href="#cont_area02"></a></span> <span><a href="#cont_area03"></a></span> <span><a href="#cont_area04"></a></span> <span><a href="#cont_area05"></a></span> </div> </nav> </header>
よろしくお願いいたします。
(追記)
各ブラウザで非表示となる位置が異なりました。
GoogleChrome:#cont_area04にきたとき(F5で更新すると出てくる)
Firefox:#cont_area03にきたとき(F5で更新しても出てこない)
Opera:#cont_area03にきたとき(F5で更新すると出てくる)
IE:問題なく動作
回答1件
あなたの回答
tips
プレビュー