自分では一向に解決ができないので質問させていただきます。
スマホ用のデザインでドロワーメニューを作っています。
fixdeで固定された画面右上のメニューブロック(naviOpen)をクリックで隠れたheaderNaviを表示させています。
しかし画面をスクロール後naviOpenをクリックするとページTOPまで戻ってしまいます。
トップまで戻ってしまうのを避ける方法としてnaviOpenをクリックした際のスクロール値をjavaScriptで記憶し、headerNaviを閉じる際に同じだけスクロールして元の位置に戻す方法があるみたいですが、それだとnaviOpenをクリックした際にページTOPまで動いたのが見えてしまうのであまり実装したくないです。
なので上記以外の方法でnaviOpenをクリックした際にページTOPまで戻らないようにする方法はありますでしょうか?
以下のように作っています。
HTML
<!DOCTYPE html> <html dir="ltr" lang="ja"> <head> <meta charset="utf-8"> <meta name=”robots” content=”noindex,nofollow“> <meta name="viewport" content="width=750"> <link rel="stylesheet" type="text/css" href="teststyle.css"> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <script type="text/javascript" src="testscript.js"></script> <title><?php echo $page_title; ?></title> </head> <body> <div id="naviOpen"> MENU </div> <nav id="headerNavi"> <div id="naviClose">閉じる</div> <ul id="mainMenu"> <li><a href="">AAAAAAA</a></li> <li><a href="">AAAAAAA</a></li> <li><a href="">AAAAAAA</a></li> <li><a href="">AAAAAAA</a></li> <li><a href="">AAAAAAA</a></li> <li><a href="">AAAAAAA</a></li> <li><a href="">AAAAAAA</a></li> </ul> </nav> <div id="mainHeader"> </div> <div id="contentsWrapper"> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> <p> 固定されたヘッダの下全てを囲むブロック</p> </div> </body> </html>
CSS
*{ margin :0px; padding: 0px; } html, body, p, dl, dt, dd { padding: 0; margin: 0; word-wrap: break-word; } body { width: 750px; min-width: 750px; } #contentsWrapper { margin-top: 150px; width: 750px; min-width: 750px; -webkit-overflow-scrolling: touch; } #mainHeader { position: fixed; top: 0; left: 0; width: 100%; min-width: 750px; height: 150px; background: #505050; } #headerNavi { display: none; position: fixed; width: 750px; top: 0; right: 0; overflow-y: scroll; z-index: 2; background: red; } #headerNavi ul { width: 750px; } #naviOpen { display: block; position: fixed; top: 0; right: 0; width: 150px; height: 150px; z-index: 1; background: #cdcdcd; } .hide { overflow: hidden; } }
JavaScript
$(function(){ windowWidth = window.innerWidth; contentsWrapper = $('#contentsWrapper'); var screenHeight = window.innerHeight; var UnderFixdeHeight = parseInt(screenHeight) - 150; contentsWrapper.css('height', UnderFixdeHeight); $('#headerNavi').css('height', screenHeight); $('#naviOpen').on('click', function() { $(this).next().animate( { width: 'show' }, 500); contentsWrapper.addClass('hide'); } ); $('#naviClose') .on('click', function() { $(this).parent().animate( { width: 'hide' }, 500); contentsWrapper.removeClass('hide'); } ); });
全く解決できないので是非ご教授いただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー