前提・実現したいこと
スマホ画面上でモーダルが表示された際にすべてのスクロールを止めるため、
preventDefaultでイベントをキャンセルしています。
モーダルが消去された際にはスクロールを再び動作させたいと思ってます。
発生している問題・エラーメッセージ
こちらの関数を変数に格納している際には正しい動作をしてくれるが、
直接書いた場合には開始処理がうまく動いてくれません。該当箇所下に記載します。
javascript
1function(event){event.preventDefault();}
該当のソースコード
こちらは正しく動きます。
javascript
1$(function(){ 2 // スクロール停止、開始用の関数 3 var movefun = function(event){ 4 event.preventDefault(); 5 } 6 7$(".modal-button").click(function(){ 8 // スクロール停止の処理 9 window.addEventListener("touchmove", movefun, {passive: false}); 10 11 return false; 12}); 13 14$(".modal-close").click(function(){ 15 // スクロール開始の処理 16 window.removeEventListener("touchmove", movefun, {passive: false}); 17 18 return false; 19});
こちらはスクロールの停止までは動きますが、開始されません。
javascript
1$(function(){ 2 // スクロール停止、開始用の関数 3 var movefun = function(event){ 4 event.preventDefault(); 5 } 6 7$(".modal-button").click(function(){ 8 // スクロール停止の処理 9 window.addEventListener("touchmove", function(event){event.preventDefault();}, {passive: false}); 10 11 return false; 12}); 13 14$(".modal-close").click(function(){ 15 // スクロール開始の処理 16 window.removeEventListener("touchmove", function(event){event.preventDefault();}, {passive: false}); 17 18 return false; 19});
試したこと
開始、終了後のpassiveの中身を見てみましたが、
どちらもfalseだったりで、お手上げ状態です。
補足情報(FW/ツールのバージョンなど)
ios12 Safari
PC版Chromeの開発者ツールのテスターでも再現するかと思います。
preventDefaultで消したイベントを復活させる
もっといい最適解もあればお伺いできますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/30 05:26