前提・実現したいこと
javascriptを使用してWebサイトを制作しようとしています。
初心者の質問で恐れ入りますが、お知恵を拝借できれば幸いです。
レスポンシブデザインのテストとして、
『1026px以上』の時にクリックイベント定義、
『1025px以下』の時に同じクリックイベントを削除する
という挙動にしたいのですが、
現在removeEventListenerが効いていない状況です。
そのため、ウィンドウサイズを変更しブレークポイントを跨ぐたび
『1026px以上』の時のclickイベント(コンソールで『ヘッダークリック!
!』と表示)が追加され、一度のクリックで2回、3回と処理が行われてしまっています。
removeEventListenerを有効にするにはどのように記述するべきでしょうか。
該当のソースコード
javascript
1 2// machMedia定義 3let mql = window.matchMedia('screen and (max-width: 1025px)'); 4 5// ブレークポイントで行う処理 6let checkBreakPoint = function(mql) { 7 8 let header = document.getElementById('header'); 9 10 //クリック時に行う処理 11 let clickHeader = function(){ 12 console.log('ヘッダークリック!'); 13 } 14 15 //1026px以上の時にaddEventListener 16 if(!mql.matches) { 17 header.addEventListener('click', clickHeader, { passive: false }); 18 19 //1025px以下の時にremoveEventListener 20 } else { 21 header.removeEventListener('click', clickHeader, { passive: false }); 22 } 23} 24 25//実行 26mql.addEventListener('change', (e) => { 27 e.stopPropagation(); 28 checkBreakPoint(mql); 29});
試したこと
・実行部分のchangeイベントをresizeイベントに変更
→setTimeoutでイベント発火のタイミング調整をしても、removeEventListener自体は効かないまま
・1026px以上の時の処理(header.addEvent....)の記述が終わった直後に
setTimeoutで5秒後にremoveEventListenerの記述をした
→5秒後にイベントは削除され、ブレークポイントを跨ぎウィンドウサイズが1025px以下になった時もクリックイベントは削除されたままだった
色々な方のremoveEventListenerに関するご質問を検索していましたが
恥ずかしながら解決策が見つかりませんでした。
大変恐れ入りますが、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/27 01:01