以前にMaterial-uiコンポーネントのモーダル(ポップアップ)を使ってみました。
モーダルが出ている間は背景のスクロールは出来なくなっています。
しかしスマホで見ると後ろ画面がスクロールしてしまったのでその対策方法。
ModalのonRenderedでtouchmoveイベントを無効にする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
cancelScroll = (e)=>{ e.preventDefault(); } handleRender = ()=>{ document.getElementById("ModalWrapper").addEventListener('touchmove', this.cancelScroll); } render() { return ( <Modal id="ModalWrapper" ... onRendered={this.handleRender}> ... </Modal> ); } |
モーダルは動的に作成されるため、作られた後に無効化する必要があります。
とりあえずこれで後ろの画面がスクロールされることはないです。
他の方法としてtouch-action
を設定してもいけます。
1 2 3 4 5 6 |
const styles = theme => ({ paper: { ... touchAction:"none", }, }); |
イベントを停止させるわけではないので比較的安全といえるかもしれない。
階層ごとの設定も簡単なのでこちらの方がいいかもしれない。
元々PCブラウザだとtouchmoveイベントを起こしても背後のスクロールは起きない。
スマホだけで起きる現象だった。
それでもtouchmoveイベント対策をすると解決するのがよくわからないがブラウザ依存の問題なのかもしれない。