前提
ReactでWebページを作っており、メニューボタンをクリックorタップするとモーダルでメニューが表示されるようにしたのですが、モーダルを表示すると必ずスクロールが一番上まで戻ってしまいます。
実現したいこと
モーダルでメニューを表示させてもメイン画面のスクロール位置が保持されるようにしたいです。
該当のソースコード
React
1import React from 'react' 2 3//activeがtrueになるとモーダルが表示されるようにしています。 4function Modal({active}) { 5 6 const scrollTop = () => { 7 return Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop); 8 }; 9 10 if(active) { 11 const position = scrollTop(); 12 console.log(position); //ここにしかコンソールログは書いていないのに、コンソールを見るとスクロール位置が出力された後に0pxという出力も出ており、メイン画面の必ずスクロール位置が必ずトップまで戻ってしまいます。 13 14 document.body.style.overflowY = "hidden"; 15 document.body.style.height = "100vh"; 16 17 document.documentElement.style.overflowY = "scroll"; 18 19 document.body.style.position = "fixed"; 20 document.body.style.top = -position; 21 22 } else { 23 24 document.body.style.overflowY = "auto"; 25 document.body.style.height = "auto"; 26 27 document.documentElement.style.overflowY = "auto"; 28 document.body.style.position = "static"; 29 30 } 31 32 return ( 33 <> 34 <ul className="navlist toggle_contents" style={{ 35 transition: '1.5s', 36 opacity: active ? 1 : 0, 37 zIndex: active ? 4 : -1, 38 }}> 39 <li className="navitem current_page_item"><a href="#">About</a></li> 40 <li className="navitem"><a href="#">Feature</a></li> 41 <li className="navitem"><a href="#">Blog</a></li> 42 <li className="navitem"><a href="#">Contact</a></li> 43 </ul> 44 </> 45 ) 46} 47 48export default Modal
試したこと
Googleで「React モーダル スクロール位置」などと検索して、
https://qiita.com/IgnorantCoder/items/3b66c9e96c2f24e0d09e
や、
https://qiita.com/ragnar1904/items/184a10fbb4d216625aa8
の記事など読んだのですが、自分のコードに落とし込む事ができずにいます。
詳しい方がおられましたら教えていただけると幸いです。
宜しくお願いします。
補足情報(FW/ツールのバージョンなど)
VSCode1.61.8
回答1件
あなたの回答
tips
プレビュー