
Vue.jsでwindowオブジェクトのスクロールイベントでの処理を実行する
前回記事「Vue.jsでwindowオブジェクトのリサイズイベントでの処理を実行する」に引き続き、今回はVue.jsのプロジェクトでスクロールイベントでの処理を行う場合のサンプルになります。UIやデザインの実装であれば、前回のリサイズイベントよりスクロールイベントの方が登場する頻度が高いのではないでしょうか。
リサイズイベントでもそうでしたが、windowオブジェクトへのアクセスはmounted以降でないとundefinedが返ってきてしまいますので注意が必要です。今回はこんな感じのコードを用意しました。
【Vue】※一部抜粋
ちなみにスクロールイベントは1px単位で処理が走ることになるため、どうしても重たくなりがちになってしまいます。そのため、実行するタイミングを間引いてあげることで処理を軽くすることができます。それについてはまた改めて別記事で紹介できればと思います。
<template>
<div id="app">
<div class="fixed">垂直方向のスクロール量:<span>{{ scrollY }}</span></div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor ......
</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor ......
</p>
</div>
</template>
<script>
export default {
data() {
return {
scrollY: 0
}
},
mounted() {
window.addEventListener('scroll', this.calculateScrollY);
},
beforeDestroy() {
window.removeEventListener('scroll', this.calculateScrollY);
},
methods: {
calculateScrollY() {
this.scrollY = window.scrollY;
console.log(this.calculateScrollY);
}
}
}
</script>
スクロールイベントでも同じように、「data」オプションにスクロール量が入るようにしておきます。「methods」ではスクロール量を取得し、dataオプションへ変数として格納されるようにします。ちなみに「scrollY」で垂直方向のスクロール量を数値として得ることができます。
あとは「mounted」でscrollイベントを用意して、コールバック関数にmethodsで定義した関数を設定すればOKです。合わせて、「beforeDestroy」のタイミングでイベントリスナーを削除しておくことを忘れないように注意します。
実際にブラウザで見てみると、スクロール量が取得できているのが確認できます。あとは、スクロール量によって条件分岐などを設定するなどでいろんな処理を実装することができます。
ちなみにスクロールイベントは1px単位で処理が走ることになるため、どうしても重たくなりがちになってしまいます。そのため、実行するタイミングを間引いてあげることで処理を軽くすることができます。それについてはまた改めて別記事で紹介できればと思います。categories
- WordPress(61)
- JavaScript(49)
- Vue.js(48)
- CSS(46)
- jQuery(34)
- Nuxt.js(22)
- Sass(21)
- Gulp(17)
- webpack(16)
- PHP(14)
- HTML(14)
- GSAP(11)
- React(10)
- Vite(9)
- Pug(9)
- Laravel(8)
- Cordova(8)
- Linux(7)
- Next.js(6)
- Apache(5)
- Shopify(4)
- REST API(4)
- Node.js(4)
- Smarty(3)
- Git(3)
- JSON(3)
- その他プログラミング(3)
- Google Apps API(3)
- Bootstrap(3)
- 環境構築・システム(3)
- TypeScript(2)
- EJS(2)
- RMS(2)
- Docker(2)
- Instagram API(2)
- Excel VBA(2)
- SVG(1)
- Dart(1)
- ECカートASP(1)
- Markdown(1)
- AMP(1)
- Nginx(1)
- XML(1)
- shellscript(1)
- Ruby(1)
- MySQL(1)