Vue组件设计-滚动置顶设计案例
更新时间:2023年04月28日 09:09:31 作者:aiguangyuan
这篇文章主要介绍了Vue组件设计-滚动置顶设计案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
在前端开发中,滚动置顶是一个比较常见的交互设计,特别是在一些大型网站的首页,当内容篇幅较多时,在页面的底部或是侧边都会放置一个滚动置顶的图标,方便用户快速回到顶部。
1. 滚动交互注意事项
1. 置顶图标在什么时候显示,什么时候消失;
2. 滚动的过程要做缓冲动画处理,即滚动要速度要递减,才不能显的那么的突兀;
2. 组件设计考虑因素
1. 组件要可以传参控制滚动置顶的位置;
2. 组件要可以传参控制滚动置顶图标在什么时候显示和消失;
3. 组件的滚动置顶图标最好支持传参自定义的样式;
4. 组件的滚动置顶图标在显示和消失时最好支持传参自定义的动画;
3. 基于Vue的滚动置顶设计实例
<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: { // 显示时的高度 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组件设计-滚动置顶的文章就介绍到这了,更多相关vue滚动置顶内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
element-ui和vue表单(对话框)验证提示语(残留)清除操作
这篇文章主要介绍了element-ui和vue表单(对话框)验证提示语(残留)清除操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-09-09基于vue2框架的机器人自动回复mini-project实例代码
本篇文章主要介绍了基于vue2框架的机器人自动回复mini-project实例代码,具有一定的参考价值,有兴趣的可以了解一下2017-06-06
最新评论