iOSで画面全体がスクロールされるのを無効化
iPadやiPhoneなど、iOS機器では画面のスクロールが上限、もしくは下限までいった状態でスクロールを続けると画面全体がスクロールされたような動きになります。
この仕様が、場合によっては問題となることがあり(画面の一部分だけスクロールさせたいなど)、この画面全体のスクロールを無効化する方法をメモしておきます。
結論としては、下記のコードを追記することで防ぐことができています。
//スクロールの対象
let target = document.getElementById('target')
//スクロール制御 上限・下限に達したら1ずらす
target.addEventListener('scroll', e => {
if(target.scrollTop === 0) {
target.scrollTop = 1
}else if (target.scrollTop + target.clientHeight === target.scrollHeight){
target.scrollTop = target.scrollTop - 1
}
})
target変数には、スクロールの対象にしたい要素を入れます。
処理としては、スクロール上限までいったときに1pxだけ下にスクロールさせ、下限にいった場合にも同じように1pxだけズラすことで結果的にスクロール上限・下限までいかないようにしています(分かりにくい)。
こうすることで、スクロール上限までいった状態でスクロールを続けても画面全体が動くことはなくなります。

コメント