如果有人想要學習jQuery的寫法,可以參考我之前的文章!
💓使用jQuery在Blogger加入回到頂端按鈕的教學, 超簡單馬上會 !
會想要改用Vue來寫,主要是因為jQuery體積龐大,
明明只有用到一些功能,卻要載入全部的jQuery相對耗時,
此外,前端框架御三家Angular、React、Vue是各公司要找前端工程師時,會要求的技能,因此若能學會其中一個,對自己也是有相當幫助的!
本文是以Vue來實作返回頂部的按鈕,並運用在Blogger上,
若想運用在自己網站上也都是可以的!
💚1. 匯入Vue,我是使用3.3.0版本的,vue2和vue3的語法會有些不同~
💚2. 設置你的button,<div id, <button class, v-on:click, v-show 等等都要記得打上去
💚3. 打入你的返回頂端語法,
一開始data()先把showButton訂為false,因為剛進網頁通常已在頂端,
再來使用mounted()來當鉤子執行,當滾動位置超過100時,就將showButton訂為true來顯示按鈕。
在元件被掛載到 DOM 後(即 mounted() 鉤子執行時),window.addEventListener('scroll', this.handleScroll) 會在 scroll 事件上註冊一個名為 handleScroll 的監聽器。這意味著只要該元件處於活動狀態,即使滾動事件頻繁發生,該監聽器也會持續監聽滾動事件。
當元件被銷毀時(例如在 destroyed() 鉤子中),使用 window.removeEventListener('scroll', this.handleScroll) 來移除對應的滾動事件監聽器。這樣可以確保在元件被銷毀後不再監聽滾動事件,防止記憶體洩漏和不必要的效能消耗。
因此,只要註冊了事件監聽器並且沒有被移除,它就會持續監聽指定的事件。
如果事件監聽器未被銷毀,可能會導致一些潛在的問題:
a. 記憶體洩漏: 未移除的事件監聽器會持續存在於記憶體中,如果監聽器數量龐大或存在時間過長,可能會造成記憶體洩漏,佔用大量記憶體資源。
b. 效能問題: 持續監聽事件可能會對效能造成影響,尤其是如果事件處理函數(例如捲動事件、滑鼠移動事件等)非常頻繁且處理邏輯複雜,會導致不必要的效能損耗。
c. 意外行為: 如果監聽器在不需要的情況下仍然存在,可能會引發意外行為。例如,在元件被銷毀後,如果事件監聽器仍然存在,處理事件的函數可能會嘗試操作已經被銷毀的 DOM 元素,導致錯誤或異常行為。
因此,雖然不移除事件監聽器可能在某些情況下暫時沒有直接的問題,但長期來看可能會導致記憶體洩漏、效能問題或意外的不可預測行為。最佳實踐是在不再需要監聽事件時,應該明確地使用 removeEventListener 來移除事件監聽器,以保持程式碼的健全性和可維護性。
👄
destroyed() 是 Vue 實例生命周期鉤子(Lifecycle Hook)之一,它在 Vue 實例被完全銷毀(destroyed)後被調用。
this.$destroy() 是手動銷毀 Vue 實例的方法。當你呼叫 this.$destroy() 時,Vue 實例將會被立即銷毀,進而觸發 Vue 實例的銷毀過程,包括執行相關的生命周期鉤子,如 beforeDestroy() 和 destroyed()。
在你的程式碼中,當觸發 scrollToTop() 方法時,你呼叫了 this.$destroy(),這將會立即銷毀 Vue 實例,並導致它的生命周期中的相關鉤子(destroyed())被調用。
>>手動呼叫this.$destroy()摧毀vue實例後,會執行鉤子destroyed(),而本例有在destroyed()中加入removeEventListener的程式,以此來刪除監聽器。
💚4. 設定你的外觀style,裡面比較重要的是position:fixed;,
因為你需要按鈕固定在右下角,所以要打right:30px;bottom:30px;,
代表從下面往上30px;從右往上左30px,就會是按鈕所在的位置了
沒有留言:
張貼留言
喜歡我的文章嗎? 喜歡的話可以留言回應我喔! ^^