您好,登錄后才能下訂單哦!
這篇文章主要介紹“Vue滾動置頂組件怎么實現”,在日常操作中,相信很多人在Vue滾動置頂組件怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Vue滾動置頂組件怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1. 置頂圖標在什么時候顯示,什么時候消失;
2. 滾動的過程要做緩沖動畫處理,即滾動要速度要遞減,才不能顯的那么的突兀;
1. 組件要可以傳參控制滾動置頂的位置;
2. 組件要可以傳參控制滾動置頂圖標在什么時候顯示和消失;
3. 組件的滾動置頂圖標最好支持傳參自定義的樣式;
4. 組件的滾動置頂圖標在顯示和消失時最好支持傳參自定義的動畫;
<template> <transition :name="transitionName"> <div v-show="visible" @click="backToTop" : class="back-to-ceiling"> <svg width="16" height="16" aria-hidden="true" viewBox="0 0 17 17" class="Icon Icon--backToTopArrow" xmlns="http://www.w3.org/2000/svg" > <path d="M12.036 15.59a1 1 0 0 1-.997.995H5.032a.996.996 0 0 1-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29a1.003 1.003 0 0 1 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z"/> </svg> </div> </transition> </template> <script> export default { name: "BackToTop", props: { // 顯示時的高度 visibilityHeight: { type: Number, default: 400, }, // 滾動置頂位置 backPosition: { type: Number, default: 0, }, // 自定義的樣式 customStyle: { type: Object, default: function () { return { right: "50px", bottom: "50px", width: "40px", height: "40px", "border-radius": "4px", "line-height": "45px", background: "#e7eaf1", }; }, }, // 定義滾動動畫 transitionName: { type: String, default: "fade", }, }, data() { return { // 是否可見 visible: false, // 滾動定時器 interval: null, // 正在滾動中 isMoving: false, }; }, mounted() { window.addEventListener("scroll", this.handleScroll); }, beforeDestroy() { window.removeEventListener("scroll", this.handleScroll); if (this.interval) { clearInterval(this.interval); } }, methods: { // 頁面滾動事件 handleScroll() { this.visible = window.pageYOffset > this.visibilityHeight; }, // 點擊頁面置頂 backToTop() { if (this.isMoving) return; const start = window.pageYOffset; let i = 0; this.isMoving = true; this.interval = setInterval(() => { const next = Math.floor( this.easeInOutQuad(10 * i, start, -start, 500) ); if (next <= this.backPosition) { window.scrollTo(0, this.backPosition); clearInterval(this.interval); this.isMoving = false; } else { window.scrollTo(0, next); } i++; }, 16.7); }, // 速度遞減運算 easeInOutQuad(t, b, c, d) { if ((t /= d / 2) < 1){ return (c / 2) * t * t + b }; return (-c / 2) * (--t * (t - 2) - 1) + b; }, }, }; </script> <style scoped> .back-to-ceiling { position: fixed; display: inline-block; text-align: center; cursor: pointer; } .back-to-ceiling:hover { background: #d5dbe7; } .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } .back-to-ceiling .Icon { fill: #9aaabf; background: none; } </style>
到此,關于“Vue滾動置頂組件怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。