
Vue.jsでwindowオブジェクトのリサイズイベントでの処理を実行する
Vue.jsのプロジェクトにて、リサイズイベントで何かの処理を実行したいときに使える方法のメモです。Vue.jsはその特性上、windowオブジェクトを使う場合には注意するポイントがあります。まずはコードを見ていきます。
【Vue】※一部抜粋
注意したいのはVue.jsの場合、DOMが生成されるのがmountedになるので、createdなどで実行すると、windowオブジェクトがundefinedとなってしまいます。ですので、リサイズイベントの実行はmounted以降にするように気をつけます。
<template>
<div id="app">
<div>ウィンドウ幅:<span>{{ windowWidth }}</span></div>
<div v-if="windowWidth > 800">
ウィンドウ幅は800px以上です
</div>
<div v-if="windowWidth <= 799">
ウィンドウ幅は800px未満です
</div>
</div>
</template>
<script>
export default {
data() {
return {
windowWidth: 0
}
},
mounted() {
window.addEventListener('resize', this.calculateWindowWidth);
},
beforeDestroy() {
window.removeEventListener('resize', this.calculateWindowWidth);
},
methods: {
calculateWindowWidth() {
this.windowWidth = window.innerWidth;
console.log(this.windowWidth);
}
}
}
</script>
テンプレートにはウィンドウ幅の数値と、ウィンドウ幅によって切り替わる簡単な処理をサンプルとしてあげています。特定の画面幅で表示が切り替わるような仕組みです。スクリプトには「data」オプションにウィンドウ幅の値が入るようになっています。デフォルトで0が入るようにしています。そして「methods」には画面幅をdataオプションの値に代入されるような処理を記述しています。
続けて「mounted」内にリサイズイベントで、methodsで定義した関数をコールバックで実行させます。最後に追加したイベントリスナーを削除させます。これはmountedより後のライフサイクルフックで実行させていきます。ここでは「beforeDestroy」にて実行しています。
実際にブラウザで見てみると、リサイズイベントで処理が行われているのが確認できます。また、ウィンドウ幅で切り分けた処理も実際に機能しているのがわかります。
注意したいのはVue.jsの場合、DOMが生成されるのがmountedになるので、createdなどで実行すると、windowオブジェクトがundefinedとなってしまいます。ですので、リサイズイベントの実行はmounted以降にするように気をつけます。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)