LoginSignup
0
0

More than 3 years have passed since last update.

モーダル、SPのメニューが表示されたときだけ中の要素をスクロールさせる

Posted at

モーダル、SPのメニューが表示されたときだけ中の要素をスクロールさせる

※覚書メモです

以前jQueryでモーダルやSPのメニューを表示したときに背景を固定する記事を載せたことがありました。
しかしそれから数年たって、そんなことをしなくても簡単に実装できちゃういいものを見つけることができました(教えてくださった同僚には感謝です)。

body-scroll-lock

▽github
https://github.com/willmcpo/body-scroll-lock

▽npmjs
https://www.npmjs.com/package/body-scroll-lock

指定した要素だけスクロールができるようになるというライブラリ。
androidもiosも難なくできました。
まさにそれがしたかったこと…!


以下使い方

今回もyarnを使います。
yarnじゃなくてもnpmでも大丈夫です(インストールするときのかき方が違うので気を付けてください)

yarn add body-scroll-lock

例)開くとき

import { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock'

// 例えばメニュー
const openBtn = document.getElementsByClassName('openBtn')[0]
const menuInner = document.getElementsByClassName('menu-inner')[0] // スクロールさせたい要素

openBtn.addEventListener('click' , () => {
    disableBodyScroll(menuInner)
})

分かりやすいように「開く」「閉じる」を分けましたが、上の例に続いて書いても大丈夫です。

例)閉じるとき

// 例えばメニュー
const closeBtn = document.getElementsByClassName('closeBtn')[0]

closeBtn.addEventListener('click' , () => {
    clearAllBodyScrollLocks()
})

この2つだけ。スクロールさせたい要素の指定を変更すればすぐに実装できます。
あんなに頭を悩ませていましたが、本当に簡単なので早く知りたかったです。。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0