vue自定义一个回到顶部组件

news2025/2/26 3:35:35

1.首先创建一个backTop.vue页面:

页面有两个按钮,一个回到顶部按钮,一个刷新按钮(showRefresh:false将刷新按钮隐藏),实现效果如下:

代码解析:

domName:需要监听滚动的dom类名,不传默认监听body

showRefresh:是否显示刷新按钮

right:组件定位距离右侧像素,默认距离右侧50px

bottom:组件定位距离底部像素,默认距离底部66px

默认监听dom元素滚动50px(scrollTop>50)后显示回到顶部组件,可自由更加情景设置

代码实现:

<template>
  <div>
    <div class="fixed-button" :style="fixedStyle">
      <div class="refresh-area" @click="refreshData" v-if="showRefresh">
        <i class="refresh"></i>
      </div>
      <div class="arrow-area" @click="backTop">
        <i class="arrowUp"></i>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  //设置需要监听滚动的div名称,默认'',监听body
  props: {
    domName: {
      type: String,
      default: '',
    },
    showRefresh: {
      type: Boolean,
      default: true,
    },
    right: {
      type: Number,
      default: 50,
    },
    bottom: {
      type: Number,
      default: 66,
    },
  },
  data() {
    return {
      fixedStyle: 'display:none;',
      dom: null, //被监听的dom
    }
  },
  mounted() {
    console.log('domName', this.domName)
    if (this.domName != '') {
      this.dom = document.querySelector('.' + this.domName)
      this.dom.addEventListener('scroll', this.scrollToTop)
    } else {
      document.body.addEventListener('scroll', this.scrollToTop)
    }
  },
  destroyed() {
    if (this.domName != '') {
      this.dom.removeEventListener('scroll', this.scrollToTop)
    } else {
      document.body.removeEventListener('scroll', this.scrollToTop)
    }
  },
  methods: {
    // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
    scrollToTop() {
      const that = this
      let scrollTop = 0
      if (this.domName != '') {
        scrollTop = this.dom.pageYOffset || this.dom.scrollTop
      } else {
        scrollTop = window.pageYOffset || document.body.scrollTop
      }

      that.scrollTop = scrollTop
      if (that.scrollTop > 50) {
        that.fixedStyle = `right:${this.right}px;bottom:${this.bottom}px;`
      } else {
        that.fixedStyle = 'display:none;'
      }
      this.$emit('scrollToTop')
    },
    // 刷新
    refreshData() {
      //   this.$refs.child1Container.refreshDataMoren("");
      this.$emit('refreshData')
    },
    // 回到顶部
    backTop() {
      const that = this
      let timer = setInterval(() => {
        let ispeed = Math.floor(-that.scrollTop / 5)
        if (this.domName != '') {
          this.dom.scrollTop = that.scrollTop + ispeed
        } else {
          document.documentElement.scrollTop = document.body.scrollTop =
            that.scrollTop + ispeed
        }

        if (that.scrollTop === 0) {
          clearInterval(timer)
        }
      }, 20)
    },
  },
}
</script>

<style>
.fixed-button {
  position: fixed;
  /* width: 40px; */
  bottom: 66px;
  right: 50px;
  z-index: 999999;
}
.refresh-area {
  color: #20499e;
  cursor: pointer;
  width: 34px;
  height: 34px;
  line-height: 34px;
  background: #ffffff;
  box-shadow: 0px 2px 6px 2px rgba(54, 78, 128, 0.1);
  border-radius: 50%;
  font-size: 16px;
  text-align: center;
}
.arrow-area {
  color: #20499e;
  cursor: pointer;
  width: 34px;
  height: 34px;
  line-height: 34px;
  margin-top: 12px;
  border-radius: 50%;
  text-align: center;
  background: #ffffff;
  box-shadow: 0px 2px 6px 2px rgba(54, 78, 128, 0.1);
  color: #20499e;
}
.refresh-area:hover {
  background: #20499e !important;
}
.arrow-area:hover {
  background: #20499e !important;
}
.refresh-area:hover .refresh {
  background: url('../assets/refreshHover.svg') no-repeat center !important;
}
.arrow-area:hover .arrowUp {
  background: url('../assets/goTopHover.svg') no-repeat center !important;
}
.refresh {
  display: inline-block;
  width: 16px;
  height: 16px;
  background: url('../assets/refresh.svg') no-repeat center;
  margin-top: 9px;
}
.arrowUp {
  display: inline-block;
  width: 14px;
  height: 16px;
  background: url('../assets/goTop.svg') no-repeat center;
  margin-top: 9px;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1823834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows下open webui+ollama+sd webui

原文&#xff1a;https://wangguo.site/Blog/2024/Q2/2024-06-14/ 说明&#xff1a;安装使用环境是在Windows下 1、给ollama一个好看的交互界面&#xff08;open webui&#xff09; 1.1、ollama安装 安装&#xff1a;在ollama官网下载windows版本进行安装 模型列表&#xff1…

ChatGPT等大模型可以代替搜索引擎吗?

在知乎看到一个问题&#xff0c;回答了一下&#xff0c;分享到这里。 把ChatGPT当作搜索引擎可靠性差点&#xff0c;但是可行。 代替搜索引擎 1、写代码 我们可以让GPT写一段算法代码或者使用某个语言API的示例&#xff0c;然后只需要把这段代码粘贴到IDE中&#xff0c;简单…

Linux编辑器 vim使用 (解决普通用户无法进行sudo提权问题)

文章目录 一.vim是什么命令模式底行模式 二.关于vim暂停问题三.注释批量化注释批量化去注释 四.解决普通用户无法进行sudo提权问题五.vim的配置 一.vim是什么 用过VS的都知道&#xff0c;拥有着编辑器编译器调试.编写C&#xff0c;C&#xff0c;python等的功能。就是集成 Linu…

Git 基础操作(一)

Git 基础操作 配置Git 安装完Git后&#xff0c;首先要做的事情是设置你的 用户名 和 e-mail 地址。这样在你向仓库提交代码的时候&#xff0c;就知道是谁提交的&#xff0c;以及提交人的联系方式。 配置用户名和邮箱 使用git config [--global] user.name "你的名字&qu…

网络爬虫概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 网络爬虫&#xff08;又被称为网络蜘蛛、网络机器人&#xff0c;在某社区中经常被称为网页追逐者&#xff09;&#xff0c;可以按照指定的规则&#…

神经网络-万能近似定理的探索

神经网络-万能近似定理的探索 对于这个实验博主想说&#xff0c;其实真的很有必要去好好做一下&#xff0c;很重要的一个实验。 1.理论介绍 万能近似定理: ⼀个前馈神经⽹络如果具有线性层和⾄少⼀层具有 “挤压” 性质的激活函数&#xff08;如 sigmoid 等&#xff09;&…

基于Matlab的细胞计数图像处理系统(GUI界面有报告) 【含Matlab源码 MX_003期】

简介&#xff1a; 本文旨在解决生物血细胞数目统计的挑战&#xff0c;提出了基于图像处理的综合方案。通过MATLAB平台&#xff0c;我们设计并实现了一套完整的细胞图像处理与分析流程。在预处理阶段&#xff0c;采用图像增强和阈值分割等方法&#xff0c;有效地提高了细胞图像的…

Swift开发——输出格式化字符

Swift语言是开发iOS和macOS等Apple计算机和移动设备系统应用程序的官方语言。Swift语言是一种类型安全的语言,语法优美自然,其程序从main.swift文件开始执行,程序代码按先后顺序执行,同一个工程的程序文件中的类和函数直接被main.swift文件调用,除了main.swift文件外,工程…

【数据挖掘-思考】分类和聚类

将芝麻和花生分开&#xff0c;是一个分类问题还是聚类问题? 显而易见的&#xff0c;在日常生活中&#xff0c;这是一个分类问题&#xff0c;在数据挖掘领域中&#xff0c;是否也是这样呢&#xff1f; 通义千问的回答&#xff1a; 在数据挖掘中&#xff0c;将芝麻和花生分开可以…

【C语言】14. qsort 的底层与模拟实现

一、回调函数 回调函数就是⼀个通过函数指针调用的函数。 把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0c;而是…

思维+暴力,CF992D - Nastya and a Game

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 992D - Nastya and a Game 二、解题报告 1、思路分析 这个题题目很吓人 因为看起来前缀和根本存不下&#xff0c;似乎没法算 这也提示我们似乎只需在小范围内枚举求解即可 题目的P / K SUM也保证了我们…

SQL中的UPDATE语句:别让你的数据“离家出走”

sql的update操作正式环境用的很少&#xff0c;但是在测试环境还是用的挺多的。 想象一下&#xff0c;你正在管理一个学校的数据库&#xff0c;其中有一个students表&#xff0c;记录着每个学生的信息。有一天&#xff0c;你接到通知说某个学生的年龄或成绩需要更新。这时&…

54.Python-web框架-Django-免费模板django-datta-able

1.Datta Able Django介绍 Detta Able Djiango是什么 Datta Able Django 是一个由AppSeed提供的开源Django管理面板&#xff0c;基于现代设计&#xff0c;为开发者提供了一流的功能和优雅的界面。它源自CodedThemes的高风格化Bootstrap 4模板——Datta Able Bootstrap Lite&…

云电脑有多好用?适合哪些人使用?

云电脑作为一种新型的计算模式&#xff0c;其应用场景广泛且多样&#xff0c;适合各类人群使用。云电脑适合什么人群使用&#xff1f;云电脑有哪些应用场景&#xff1f;有什么好的云电脑推荐&#xff1f;以下本文将详细探讨云电脑的主要应用场景及其适用人群的相关内容&#xf…

【YOLOv5/v7改进系列】改进池化层为RT-DETR的AIFI

一、导言 Real-Time DEtection TRansformer&#xff08;RT-DETR&#xff09;&#xff0c;是一种实时端到端目标检测器&#xff0c;克服了Non-Maximum Suppression&#xff08;NMS&#xff09;对速度和准确性的影响。通过设计高效的混合编码器和不确定性最小化查询选择&#xf…

缩窄route范围来提速本地打包的尝试

目录 为什么要缩窄route范围缩窄route的方式意外触发的重复构建重复构建的原因解决方案 为什么要缩窄route范围 对于一些大单页&#xff0c;单个router-view中可能包含上百个页面。但是开发的时候其实并不需要那么多调试那么多页面。 因此&#xff0c;为了节省不必要的打包和热…

【SpringBoot + Vue 尚庭公寓实战】地区信息管理接口实现(九)

【SpringBoot Vue 尚庭公寓实战】地区信息管理接口实现&#xff08;九&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】地区信息管理接口实现&#xff08;九&#xff09;1、业务说明2、数据逻辑模型3、接口实现3.1、查询省份信息列表3.2、根据省份ID查询城市信息列表3…

Python对象序列化库之dill使用详解

概要 在 Python 编程中,序列化(Serialization)和反序列化(Deserialization)是处理对象持久化和数据传输的常见任务。Python 提供了内置的 pickle 模块用于对象序列化,但它在处理复杂对象(如带有 lambda 函数、生成器和闭包的对象)时存在一定局限性。dill 库是 pickle …

本地运行大语言模型(LLMs)

用例 像PrivateGPT、llama.cpp、Ollama、GPT4All、llamafile 等项目的流行度凸显了本地&#xff08;在您自己的设备上&#xff09;运行大型语言模型&#xff08;LLMs&#xff09;的需求。 这至少有两个重要的好处&#xff1a; 1.隐私&#xff1a;您的数据不会发送给第三方&a…

【Java面试】十八、并发篇(中)

文章目录 1、什么是AQS2、ReentrantLock的实现原理2.1 原理2.2 其他补充点 3、synchronized和Lock有什么区别3.1 区别3.2 Demo代码3.3 signal方法的底层实现 4、死锁的产生与排查4.1 死锁产生的条件是什么4.2 死锁的排查 1、什么是AQS AQS&#xff0c;抽象队列同步器&#xff…