備忘録までに。
こちらの記事から引用。
https://www.vuescript.com/prevent-body-scroll/
インストール
npm
npm install v-scroll-lock --save
yarn
yarn add v-scroll-lock
CDN
main.js
<script src="https://cdn.jsdelivr.net/npm/v-scroll-lock@1.0.1/dist/v-scroll-lock.min.js"></script>
取り込み
main.js
import VScrollLock from 'v-scroll-lock'
Vue.use(VScrollLock)
index.html
<template>
<div class="modal" v-if="open">
<button @click="closeModal">X</button>
<div class="modal-content" v-scroll-lock="open">
<p>Modal Content Here</p>
</div>
</div>
</template>
main.js
export default {
name: 'Modal',
data() {
return {
open: false,
}
},
methods: {
openModal() {
this.open = true
},
closeModal() {
this.open = false
},
},
}
概要
v-scroll-lock
は、インストールされた時点では、body
全体のスクロールがロックされてしまう。
data
に、open: false
を追加。ここの命名は任意。
そうすることによって、通常時(モーダル非表示時)にはスクロールが可能になる。
methods
に、openModal
やcloseModal
(命名は任意)を設置し、
openModal
にはthis.open = true
を設置、
これでv-on:click="openModal"
が呼び出されたときに、背景スクロールは停止。
body
要素には、style="overflow: hidden"
が追加されている。
closeModal
が呼び出されたら、this.open = false
が発動し、通常時のスクロールは可能となる。