最近项目遇到一个问题,需要在个别出现较高垂直滚动条的页面,加入一个返回顶部的小功能。虽然利用许多Jquery插件可以实现,但是elementUI的官网本身就有一个goTop组件(奈何该组件没有开放),效果还不错,为了页面风格的一致性,准备对该组件进行了简单模拟,恰好CSDN已有一位前辈对此进行了封装(vue+element-ui 回到顶部组件),而且封装的相对完善,在此对其根据个人需求进行二次封装并添加演示demo。

1.官网goTop组件效果图 VS 实际模拟组件效果图

2.javascript & stylesheet

kt-scroll-top.js


var html = `<transition name="el-fade-in"><div class="kt-scroll-top" @click="scrollToTop" v-show="toTopShow" ref="scrollTopWrapper"><i class="el-icon-caret-top"></i></div></transition>
`;Vue.component('kt-scroll-top', {template: html,data() {return {toTopShow: false,scrollTop: 0}},props: {bodyScroll: {type: Boolean,default: true}},methods: {handleScroll() {this.scrollTop = this.bodyScroll ? window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop : this.$refs['scrollTopWrapper'].parentNode.scrollTop;this.toTopShow = this.scrollTop > 300;},scrollToTop() {let timer = null, _this = this, dom = this.$refs['scrollTopWrapper'].parentNode;cancelAnimationFrame(timer);timer = requestAnimationFrame(function fn() {if (_this.scrollTop > 5000) {_this.scrollTop -= 1000;if (_this.bodyScroll) {document.body.scrollTop = document.documentElement.scrollTop = _this.scrollTop;} else {dom.scrollTop = _this.scrollTop;}timer = requestAnimationFrame(fn);} else if (_this.scrollTop > 1000 && _this.scrollTop <= 5000) {_this.scrollTop -= 500;if (_this.bodyScroll) {document.body.scrollTop = document.documentElement.scrollTop = _this.scrollTop;} else {dom.scrollTop = _this.scrollTop;}timer = requestAnimationFrame(fn);} else if (_this.scrollTop > 200 && _this.scrollTop <= 1000) {_this.scrollTop -= 100;if (_this.bodyScroll) {document.body.scrollTop = document.documentElement.scrollTop = _this.scrollTop;} else {dom.scrollTop = _this.scrollTop;}timer = requestAnimationFrame(fn);} else if (_this.scrollTop > 50 && _this.scrollTop <= 200) {_this.scrollTop -= 10;if (_this.bodyScroll) {document.body.scrollTop = document.documentElement.scrollTop = _this.scrollTop;} else {dom.scrollTop = _this.scrollTop;}timer = requestAnimationFrame(fn);} else if (_this.scrollTop > 0 && _this.scrollTop <= 50) {_this.scrollTop -= 5;if (_this.bodyScroll) {document.body.scrollTop = document.documentElement.scrollTop = _this.scrollTop;} else {dom.scrollTop = _this.scrollTop;}timer = requestAnimationFrame(fn);} else {cancelAnimationFrame(timer);_this.toTopShow = false;}});}},mounted() {this.$nextTick(function () {window.addEventListener('scroll', this.handleScroll, true);});},destroyed() {window.addEventListener('scroll', this.handleScroll, true);}
});

kt-scroll-top.css


.kt-scroll-top {background-color: #fff;position: fixed;right: 100px;bottom: 150px;width: 40px;height: 40px;size: 40px;border-radius: 20px;cursor: pointer;transition: .3s;box-shadow: 0 0 6px rgba(0,0,0,.12);z-index: 5;
}.kt-scroll-top .el-icon-caret-top {color: #409eff;display: block;line-height: 40px;text-align: center;font-size: 18px;
}.kt-scroll-top:hover {opacity: 1;
}

3.演示html

kt-scroll-top-demo.html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>KT-SCROLL-TOP-DEMO</title><!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><!-- 引入样式 --><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"><!-- 引入组件库 --><script src="https://unpkg.com/element-ui/lib/index.js"></script><!-- kt-scroll-top --><script src="./kt-scroll-top.js"></script><link rel="stylesheet" href="./kt-scroll-top.css"><style>.content-wrapper {height: 300px;overflow: auto;width: 80%;margin: 0 auto;border: 3px solid red;}.content-wrapper h1 {height: 60px;line-height: 60px;text-align: center;font-size: 60px;font-weight: bolder;}</style>
</head><body><div id="app" style="height: 2000px"><div class="content-wrapper"><h1>滑动右侧滚动条出现scrollTop图标!</h1><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><!-- 局部goTop:注意父节点要能出现滚动条 --><kt-scroll-top style="top: 240px;right: 200px;" :body-scroll="false"></kt-scroll-top></div><!-- 全局goTop --><kt-scroll-top></kt-scroll-top></div></body>
<script>var APP = new Vue({el: '#app'})
</script></html>

PS:完整demo以图包方式存放,右键(演示demo的gif动图 ) -> 图片另存为(xxx.gif) -> 右键重命名(xxx.rar) -> 右键解压即可。

elementUI之模拟goTop组件相关推荐

  1. Vue3 element-ui实现Pagination分页组件--封装分页

    什么是Pagination分页组件? 在 B 端的 web 开发中,分页组件或者叫分页器,是较为常用的控件之一,通常配合表格或列表,实现数据量大的情况下,分页拆解数据的功能. 1.scrollTo和滚 ...

  2. elementUI的DatePicker+DateTimePicker组件的自定义日期禁用

    elementUI的DatePicker+DateTimePicker组件的自定义日期禁用

  3. elementUI多选框组件:多选数组,取值问题

    elementUI多选框组件:多选数组,取值问题 效果图: <templete>部分: <!-- 我的推荐人才的简历列表 --> <!-- 已发布职位list列表 --& ...

  4. element-ui 左侧边栏el-menu组件: 路由跳转 - 案例篇

    有顶部导航 .还有侧边栏导航:如何实现路由的设置.跳转.高亮? A. 顶部导航 · Hhtml 代码如下:(含高亮设置) <el-menu:default-active="$route ...

  5. element-ui 框架的checkbox组件:点击事件 与 选中判断 - 代码篇

    vue + element-ui 框架的checkbox组件:点击事件 与 选中判断 代码如下: html部分 <!-- 全选 刷新 --> <div class="btn ...

  6. element upload预览_vue2.0 使用element-ui里的upload组件实现图片预览效果方法

    1.首先我们在cli中引入element-ui 2.然后在具体的代码中放入uoload组件 点击上传 只能上传jpg/png文件,且不超过500kb 3.使用element-ui的upload组件中提 ...

  7. Unity中使用模板测试模拟Mask组件效果

    本文分享Unity中使用模板测试模拟Mask组件效果 在上一篇文章中, 我们分享了模板测试的基础知识, 在今天的分享中, 我们会尝试使用模板测试来模拟遮罩效果. Unity中使用模板测试模拟Mask组 ...

  8. vue3 - 仿 element-ui Breadcrumb 面包屑组件封装自己的面包屑组件

    仿 element-ui Breadcrumb 面包屑组件封装自己的面包屑组件 element-ui 面包屑结构 <el-breadcrumb separator="/"&g ...

  9. 使用ElementUi的tabs切换组件时下拉选择器出现破板情况

    解决ElementUi下拉框的破板情况 使用ElementUi的tabs切换组件时下拉选择器出现破板情况 问题原因 解决问题 使用ElementUi的tabs切换组件时下拉选择器出现破板情况 项目中使 ...

  10. element-ui 去掉谷歌浏览器el-input组件或input自动填充账号密码

    element-ui 去掉谷歌浏览器el-input组件自动填充账号密码 效果图 一.主要代码之el-input 二.主要代码之input 1.使用element中el-input自带的属性auto- ...

最新文章

  1. 【整理】Linux驱动中,probe函数何时被调用
  2. 雨林木风“115网络U盘”免费永久空间速度还挺快的
  3. CSS十问——好奇心+刨根问底=CSSer (转)
  4. PHP5各个版本的新功能和新特性总结(转载 http://www.jb51.net/article/48150.htm)
  5. ubuntu16.04安装MATLAB R2017b步骤详解(附完整破解文件包)
  6. 用Android Sutdio调试NDK
  7. 【数据结构】十字链表
  8. 堆排序算法过程图解_堆排序算法
  9. Syzmlw 蜗居在线播放
  10. Fetcher failure for URL: ‘gitsm://github.com/Xilinx/qemu.git;protocol=https petalinux build 问题
  11. Rasa系列教程(二) -- Rasa NLU基础
  12. 机器人视觉测量与控制
  13. java数组逆序_Java 数组的排序、逆序
  14. 清华大学推荐:这32本书籍你看过几本?
  15. 【网络安全】重放攻击(Replay Attacks)
  16. 用计算机搞音乐,用电脑键盘做音乐
  17. 《海盗派测试分析》笔记-01 了解测试任务 KYM
  18. Numpy:关于flatten的理解
  19. 基于JAVA-英杰学堂网上教学平台-计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  20. 关于八码数问题有解与无解的证明

热门文章

  1. 开发者企业公司 邓白氏公司 D-U-N-S Number
  2. 【语言小知识】-java中将 两个int[] 型数组 整合到一起的方法
  3. Linux环境下利用perl脚本批量筛选VCF文件指定样本
  4. 机器学习之信用卡诈骗案例总结
  5. Scheme语言深入
  6. 当我们在谈论高并发的时候究竟在谈什么?
  7. win10进程太多怎么优化_你应该这样用win10(优化篇)
  8. Linux性能优化之内存(一)
  9. mariaDB数据库安装
  10. OpenWrt 内的阿里云盘 WebDAV 做磁盘使用