vue3監(jiān)聽resize窗口事件(離開頁面要銷毀窗口事件)
resize事件:
resize事件是改變窗口大小時發(fā)生的事件,可以在窗口開啟、最大化、最小化、窗口大小改變(如拖拉改變窗口大小、move語句改變窗口大小、改變width或height屬性以改變窗口大?。r發(fā)生。
1.監(jiān)聽瀏覽器窗口變化,實時獲取該窗口的寬度和高度
//封裝getWindowInfo()方法 const getWindowInfo = () => { const windowInfo = { width: window.innerWidth, hight: window.innerHeight } console.log(windowInfo); };
2.監(jiān)聽 resize 事件
//通過window監(jiān)聽 window.addEventListener('resize', getWindowInfo); //缺點是會頻繁觸發(fā)這個事件,造成頁面卡頓,優(yōu)化的方法使用防抖或節(jié)流。
//優(yōu)化后的方法:
防抖debounce:在事件觸發(fā)n秒后再執(zhí)行,如果在n秒內又有新的觸發(fā),就重新計算
節(jié)流throttle:連續(xù)事件觸發(fā),在指定的時間內,不管觸發(fā)幾次,就只執(zhí)行一次
//使用防抖 (setTimeout定時器) const getWindowInfo = () => { const windowInfo = { width: window.innerWidth, hight: window.innerHeight } }; const debounce = (fn, delay) => { let timer; return function() { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { fn(); }, delay); } }; //觸發(fā)事件 觸發(fā)時間(指定時間內執(zhí)行事件) const cancalDebounce = debounce(getWindowInfo, 500); window.addEventListener('resize', cancalDebounce);
//vue3 使用生命周期銷毀鉤子 onUnmounted(() => { console.log('onUnmounted','打印是否生效'); //移除監(jiān)聽事件 window.removeEventListener('resize', cancalDebounce); })
vue2和vue3的生命周期如下:
vue3使用生命周期鉤子例子:
<script> import { onMounted } from 'vue' // 首先需要通過組合式API的方式把聲明周期鉤子引入項目 export default { setup() { onMounted(() => { // 在 setup 函數中,使用箭頭函數的方式使用。 console.log('onMounted') }) }, } </script>
vue3 生命周期執(zhí)行順序:
<template> <div> <h1>content : {{num}}</h1> <el-button type="primary" @click="num++">num++</el-button> </div> </template> <script> import { onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted, onErrorCaptured, ref } from 'vue' export default { setup() { const num = ref(0) onBeforeMount(() => { console.log('onBeforeMount') }) onMounted(() => { console.log('onMounted') }) onBeforeUpdate(() => { console.log('onBeforeUpdate') }) onUpdated(() => { console.log('onUpdated') }) onBeforeUnmount(() => { console.log('onBeforeUnmount') }) onUnmounted(() => { console.log('onUnmounted') }) onErrorCaptured(() => { console.log('onErrorCaptured') }) console.log('setup執(zhí)行了') return { num } }, } </script> <style scoped> </style>
總結
到此這篇關于vue3監(jiān)聽resize窗口事件(離開頁面要銷毀窗口事件)的文章就介紹到這了,更多相關vue3監(jiān)聽resize窗口事件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue3中getCurrentInstance獲取組件實例踩坑詳細記錄
getCurrentInstance()是Vue.js3?Composition?API中的一個函數,它的作用是獲取當前組件的實例對象,下面這篇文章主要給大家介紹了關于vue3中getCurrentInstance獲取組件踩坑的相關資料,需要的朋友可以參考下2024-02-02前端項目vue3/React如何使用pako庫解壓縮后端返回gzip數據
pako是一個流行的JS庫,用于在瀏覽器中進行數據壓縮和解壓縮操作,它提供了對常見的壓縮算法的實現,使開發(fā)者能夠在客戶端上輕松進行數據壓縮和解壓縮,這篇文章主要介紹了前端項目vue3/React使用pako庫解壓縮后端返回gzip數據,需要的朋友可以參考下2024-07-07vue3+element-plus暗黑模式切換動畫圓弧過渡效果
文章介紹了如何在Vue 3和Element Plus中實現暗黑模式的切換,并通過動畫和圓弧過渡效果提升用戶體驗,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-01-01vue-element-admin中node-sass換成dart-sass,安裝依賴報code?128多種問題的解決
這篇文章主要介紹了vue-element-admin中node-sass換成dart-sass,安裝依賴報code?128多種問題的解決方法,本文給大家分享問題原因分析及解決方法,需要的朋友可以參考下2023-02-02