※2021.05.22:本記事の修正版となる記事を作成しました。
TL; DR
- jQueryのコードを
addEventListener
で囲む addEventListener
の第3引数でpassive: false
を設定する- jQueryの
.on
から取れるoriginalEvent
はaddEventListener
で渡されるオブジェクトを取れる
発生していた問題
前提
- スクロールを検知して、イージングのアニメーションを付与するコードを書いていた
こんな感じの
$(document).on(mousewheelevent, function (e) { e.preventDefault(); var delta = e.originalEvent.deltaY ? -(e.originalEvent.deltaY) : e.originalEvent.wheelDelta ? e.originalEvent.wheelDelta : -(e.originalEvent.detail); ... $('html,body').stop().animate({ scrollTop: scrSet }, scrSpeed, scrEasing); });
問題
- Chromeのコンソールに下のエラーが。
[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive.
解決したかわからないがとりあえずエラーが止まったコード
document.addEventListener(mousewheelevent, function(e) { $(function () { e.preventDefault(); var delta = e.deltaY ? -(e.deltaY) : e.wheelDelta ? e.wheelDelta : -(e.detail); ... $('html,body').stop().animate({ scrollTop: scrSet }, scrSpeed, scrEasing); }); }, {passive: false});
- エラーは止まったが、こういう書き方が良いかわからない