Vue組件設(shè)計(jì)-滾動(dòng)置頂設(shè)計(jì)案例
在前端開發(fā)中,滾動(dòng)置頂是一個(gè)比較常見的交互設(shè)計(jì),特別是在一些大型網(wǎng)站的首頁,當(dāng)內(nèi)容篇幅較多時(shí),在頁面的底部或是側(cè)邊都會(huì)放置一個(gè)滾動(dòng)置頂?shù)膱D標(biāo),方便用戶快速回到頂部。
1. 滾動(dòng)交互注意事項(xiàng)
1. 置頂圖標(biāo)在什么時(shí)候顯示,什么時(shí)候消失;
2. 滾動(dòng)的過程要做緩沖動(dòng)畫處理,即滾動(dòng)要速度要遞減,才不能顯的那么的突兀;
2. 組件設(shè)計(jì)考慮因素
1. 組件要可以傳參控制滾動(dòng)置頂?shù)奈恢茫?/p>
2. 組件要可以傳參控制滾動(dòng)置頂圖標(biāo)在什么時(shí)候顯示和消失;
3. 組件的滾動(dòng)置頂圖標(biāo)最好支持傳參自定義的樣式;
4. 組件的滾動(dòng)置頂圖標(biāo)在顯示和消失時(shí)最好支持傳參自定義的動(dòng)畫;
3. 基于Vue的滾動(dòng)置頂設(shè)計(jì)實(shí)例
<template> <transition :name="transitionName"> <div v-show="visible" @click="backToTop" :style="customStyle" 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" style="height: 16px; width: 16px"> <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: { // 顯示時(shí)的高度 visibilityHeight: { type: Number, default: 400, }, // 滾動(dòng)置頂位置 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", }; }, }, // 定義滾動(dòng)動(dòng)畫 transitionName: { type: String, default: "fade", }, }, data() { return { // 是否可見 visible: false, // 滾動(dòng)定時(shí)器 interval: null, // 正在滾動(dòng)中 isMoving: false, }; }, mounted() { window.addEventListener("scroll", this.handleScroll); }, beforeDestroy() { window.removeEventListener("scroll", this.handleScroll); if (this.interval) { clearInterval(this.interval); } }, methods: { // 頁面滾動(dòng)事件 handleScroll() { this.visible = window.pageYOffset > this.visibilityHeight; }, // 點(diǎn)擊頁面置頂 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); }, // 速度遞減運(yùn)算 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>
到此這篇關(guān)于Vue組件設(shè)計(jì)-滾動(dòng)置頂?shù)奈恼戮徒榻B到這了,更多相關(guān)vue滾動(dòng)置頂內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue實(shí)現(xiàn)導(dǎo)出excel表格功能
這篇文章主要介紹了Vue實(shí)現(xiàn)導(dǎo)出excel表格的功能,在文章末尾給大家提到了vue中excel表格的導(dǎo)入和導(dǎo)出代碼,需要的朋友可以參考下2018-03-03Vue中實(shí)現(xiàn)表單地區(qū)選擇與級(jí)聯(lián)聯(lián)動(dòng)示例詳解
這篇文章主要為大家介紹了Vue中實(shí)現(xiàn)表單地區(qū)選擇與級(jí)聯(lián)聯(lián)動(dòng)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09vue實(shí)現(xiàn)自定義公共組件及提取公共的方法
這篇文章主要介紹了vue實(shí)現(xiàn)自定義公共組件及提取公共的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Element-ui Drawer抽屜按需引入基礎(chǔ)使用
這篇文章主要為大家介紹了Element-ui Drawer抽屜按需引入基礎(chǔ)使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07