自开发多功能Vue组件:可定义滚动速度[回到顶部/底部]图标组件的安装与使用!

news2025/1/17 3:54:14

@samdy-chan/vue3-goto-top-or-bottom

  • Preview(本组件使用效果预览图)
  • 本组件使用过程中的 GIF 动态效果图(图片经过压缩,视觉可能会有所模糊):

本组件使用动态效果图

  • Functional Description(功能描述)
@samdy-chan/vue3-goto-top-or-bottom 这个 vue3 自定义组件由作者 Samdy_Chan 独立开发。此组件的主要功能是根据父容器是否出现垂直滚动条来自动显示/隐藏 [滚动到顶部/底部] 图标,点击图标可直接或缓慢动画效果滚动到父容器或页面顶部/底部,其主要功能包括:

1)、本组件基于 Vite 5.3.1 + Vue 3.4.29 + TypeScript(TS) 5.2.2 构建打包,支持组件参数TS类型声明;
本组件的[滚动到顶部/底部]图标文件和所有css样式代码都已经全部打包到生成的 js 文件中,并正常引用和使用,所以不会额外生成单独的图标图片文件及css样式文件;
[滚动到顶部/底部]图标采用 png 透明图片,可通过组件参数如

<GotoTopOrBottom :cssObj="{backgroundColor: '#2c8ce6'}" 

改变图标的颜色(默认为浅蓝色)。由于图片较小,为了方便,并在打包时将图片打包为 base64 编码格式,并在打包后的 js 文件中直接引用了此 base64 编码格式的图片;

2)、根据此组件父容器(HTML父标签元素)的内容如果超出了父容器的高度(需设置父容器css属性height或max-height),出现了垂直滚动条时(需设置父容器css属性overflow: auto或overflow-y: auto),会自动显示本组件(滚动到顶部/底部)箭头图标,点击图标可直接或缓慢动画效果滚动到父容器或页面顶部/底部;

3)、本组件会自动判断,如果滚动条已经滚动到父容器最顶部(包括手动拖动滚动条到顶部,或点击本组件[滚动到顶部]图标滚动到顶部),则会隐藏[滚动到顶部]图标,只显示[滚动到底部]图标。反之亦然,当滚动到底部时,只显示[滚动到顶部]图标;

4)、本组件的[滚动到顶部/底部]图标可以在父容器(当缺省 parentIsWindow 参数或值为 false)或页面(当 parentIsWindow 参数值为 true)范围内随意拖动移动,以便方便阅读父容器的内容,鼠标左键按住图标0.5秒,即可拖动移动图标;

5)、右击本组件的[滚动到顶部/底部]图标,在弹出的快捷菜单中点击[隐藏]菜单项,可在本次浏览中临时隐藏本组件的[滚动到顶部/底部]图标,以便方便阅读父容器的内容;

6)、使用本组件时,可设置传递 animateObj 对象参数是否开启缓慢滚动动效 animateObj.enable(默认true,开启),和滚动时长 animateObj.duration(默认300毫秒,建议保留此默认值,如果设置不当,可能会引起滚动卡顿不流畅),使用方法,例如:

<GotoTopOrBottom :animateObj="{enable:true, duration: 300}" />

缺省不设置,默认就是开启滚动动效和滚动时长300毫秒;

  • Installation(安装方法)
a)、For npm:

npm install @samdy-chan/vue3-goto-top-or-bottom --save

b)、For yarn:

yarn add @samdy-chan/vue3-goto-top-or-bottom

c)、For pnpm:

pnpm add @samdy-chan/vue3-goto-top-or-bottom --save

在 main.js / main.ts 中全局注册本组件,这样在其它所有组件及.vue页面中直接使用本组件标签即可,无需再导入,全局注册代码如下:


// main.js or main.ts

import { createApp } from 'vue';

import App from './App.vue';

// 1、导入本组件(必须用默认导入方式)

import GotoTopOrBottom from 'vue3-goto-top-or-bottom';

// 根据 App.vue 组件创建 Vue app 实例

const app = createApp(App);

// 2、全局注册本组件

app.use(GotoTopOrBottom);

// 挂载 Vue app 实例到 id 为 'app' 的 DOM 节点中

app.mount('#app');

在每个需要使用本组件的.vue文件中都要导入本组件(必须用分别导入方式):

// 1、导入本组件

<script setup lang="ts">
    // 必须用分别导入方式(在 main.js or main.ts 中全局注册,则要用默认导入方式)
    import { GotoTopOrBottom } from '@samdy-chan/vue3-goto-top-or-bottom';

    /**** 组件参数及支持的自定义事件设置 ****/
	/** 本组件目前支持配置及传递 2 个可选的自定义事件,分别是:@topFinished、@bottomFinished,说明如下:
@topFinished:点击[回到顶部]图标或滚动条滚动到顶部后,要调用的自定义事件回调函数;
@bottomFinished:点击[回到底部]图标或滚动条滚动到底部后,要调用的自定义事件回调函数;
	**/

    /** 本组件目前支持配置及传递 7 个 Props 参数,分别是:timeout、parentIsWindow、showIconTips、showWhichIcon、scrollDistance、cssObj、animateObj,其中 cssObj、animateObj 为对象式配置参数,这些参数的作用及说明如下(也可详见本组件的TS类型声明文件<<goto-top-or-bottom.vue.d.ts>>,如果是在 vite + ts 环境中使用本组件,import 导入本组件后,按住Ctrl+鼠标左击本组件名,会自动弹出类型声明或跳转到类型声明文件)
    **/
    // 参数一(timeout):可选参数,加载或刷新页面时,延迟显示本组件滚动图标的时间,默认值为2000毫秒(2秒)。因为父容器的内容有可能是异步获取的(如读取文件或请求后端 api 接口),这样的话,一开始父容器还没有内容,是不会有滚动条的,待获取到异步数据填充到父容器并超过其允许的高度后,才会出现滚动条,此时,才判断需要显示滚动图标,可根据你的系统及网络状况,调节该延迟参数,单位为毫秒,一般使用默认值2000毫秒应该足够。
    const timeout = 2000;
    
    // 参数二(parentIsWindow):可选参数,父容器是否为顶级元素(window/document/body),默认值为false,将本组件放在哪个HTML标签容器内,就是使用本组件控制哪个HTML标签容器(父容器)的滚动。
    const parentIsWindow = false;
    /** 如果需要为某个块级父容器(如 div/main/section/article/aside/display:block等)添加本滚动图标组件,只需要将本组件放在父容器一级子级别中即可,如下:
    <div class="parent-container">
      ......
      <GotoTopOrBottom />
    </div>
    **/

    /** 如果需要把本滚动图标组件控制顶级对象(window/document/body)的滚动,即滚动整个页面窗口的滚动条时,显示和使用本组件,侧可将本组件放在页面任何HTML标签内,但需要指定 parentIsWindow 参数或设置为 true,如下:
      ......
      <GotoTopOrBottom :parentIsWindow="true" />
    **/
    
    // 参数三(showIconTips):可选参数,鼠标放在[回到顶部/底部]图标是否显示标签 title 属性的提示内容,默认值 true
    const showIconTips = true;

	// 参数四(showWhichIcon):可选参数,根据当前滚动情况,显示哪个滚动图标:
    // 'both':显示[回到顶/底部]两个图标(默认值),
    // 'top':只显示[回到顶部]图标,
    // 'bottom':只显示[回到底部]图标
    const showWhichIcon = 'both';

	// 参数五(scrollDistance):可选参数,滚动多少距离后才显示[回到顶/底部]图标,默认值 1
    const scrollDistance: 1;
    
    // 参数六(cssObj):可选参数,组件 css 样式设置参数的对象,以下均为默认值,如不传该参数,各属性将使用默认值,
    // 如果只想修改某些 css 属性,只需要设置需要修改的属性即可,如:
    // <GotoTopOrBottom :cssObj="{width: '30px', height: '30px'}" />
	// cssObj 样式设置对象参数各属性默认值如下:
    const cssObj = {
      // 本组件滚动图标距离父容器或页面顶部的距离,默认值是50%,top: '50%' + translateY: '-50%' 为垂直居中
      top: '50%',
      // 本组件滚动图标距离父容器或页面右边距的距离,默认值30px
      right: '30px',
      // 本组件滚动图标向上移动自身距离的一半(-50%,默认)
      translateY: '-50%',
      // [回到底部]图标盒子顶部距离[回到顶部]图标底部的距离,默认值10px
      marginTop: '10px',
      // 本组件滚动图标的宽高大小设置,默认值40px
      width: '40px',
      height: '40px',
      // 本组件滚动图标的四边角圆弧度设置,50%为正圆形,默认值50%
      borderRadius: '50%',
      // 本组件滚动图标的颜色,默认为浅蓝色#2c8ce6
      backgroundColor: '#2c8ce6',
      // 本组件滚动图标的透明度设置,默认值为 0.6
      opacity: '.6',
      // 拖拽滚动图标到上下左右边界时保留的间距值,默认值为0px
      sideMargin: '0px'
    }
    
    // 参数七(animateObj):可选参数,组件滚动动画效果参数设置,以下均为默认值,如不传该参数,将使用以下默认值:
    const animateObj = {
      // 是否开启滚动动画,不开启则立即一次性滚动到顶部/底部,默认开启true
      enable: true,
      // 动画时长,单位毫秒,默认值300毫秒,需开启动画才生效(animateObj.enable=true)。数字越大,滚动越慢,建议保留默认值即可
      duration: 300,
      // 定时器控制多久滚动一次,单位毫秒,默认值15毫秒,需开启动画才生效(animateObj.enable=true)。数字越大,滚动越卡顿,建议保留默认值即可
      interval: 15
    }
    // 说明:animateObj.duration 和 animateObj.interval 参数可产生滚动次数(滚动多少次才能滚动到顶/底部);滚动次数 = animateObj.duration / animateObj.interval
</script>
// 2、使用本组件

// 2.1、在 div 等块状盒子父容器中使用本组件(控制div等块状父容器的滚动)

<template>
    <div class="parent-container">
    <!-- 使用方式1:最基本使用,无需传递任何参数,使用默认值一般足够了,本组件必须放在父容器标签一级层次内 -->
        <GotoTopOrBottom />
    <!-- 使用方式2:传递如上设置的指定参数 -->
        <!--
        <GotoTopOrBottom 
            :timeout="2000" 
            :parentIsWindow="false" 
            :showIconTips="true"
			showWhichIcon="both"
			:scrollDistance="1"
            :cssObj="cssObj" 
            :animateObj="animateObj" />
        -->
        <!-- 使用方式3:传递设置参数的非默认值 -->
        <!--
        <GotoTopOrBottom 
            :timeout="1500" 
			showWhichIcon="top"
			:scrollDistance="50"
            :cssObj="{width: '30px', height: '30px', backgroundColor: '#00ff00'}" 
            :animateObj="{duration: 500}" />
         -->
    </div>
</template>

// 2.2、在 window/document/body 顶级父容器中使用本组件(控制顶级父容器的滚动)
<template>
    <!-- 必须要指定 parentIsWindow 参数或设置其为布尔类型值 true,其它的参数设置同上2.1所说的。
         要将 window/document/body 作为父容器时,可将本组件放在任意HTML标签内
    -->
    <GotoTopOrBottom :parentIsWindow="true" />
</template>
参数名类型是否可选说明默认值
timeoutnumber加载或刷新页面时,延迟显示本组件滚动图标的时间(单位毫秒ms),因为父容器的内容有可能是异步获取的(如读取文件或请求后端 api 接口),这样的话,一开始父容器还没有内容,是不会有滚动条的,待获取到异步数据填充到父容器并超过其允许的高度后,才会出现滚动条,此时,才判断需要显示滚动图标(手动滚动时也会显示滚动图标),可根据你的系统及网络状况,调节该延迟参数,单位为毫秒,一般使用默认值2000毫秒应该足够。2000
parentIsWindowboolean父容器是否为顶级(window/document/body)元素,将本组件放在哪个HTML标签容器内,就是使用本组件控制哪个HTML标签容器(父容器)的滚动。当此参数值为true时,表示将整个页面窗口设置为父容器,控制整个页面的滚动,此时将本组件放在任意HTML标签内都可以。false
showIconTipsboolean鼠标放在[回到顶部/底部]图标是否显示标签 title 属性的提示内容true
showWhichIconenum: 'both'|'top'|'bottom' 显示哪个滚动图标,根据当前滚动距离情况:
  • 'both':显示[回到顶/底部]两个图标(默认值)
  • 'top':只显示[回到顶部]图标
  • 'bottom':只显示[回到底部]图标
'both'
scrollDistancenumber滚动多少距离后才显示[回到顶/底部]图标1
cssObjobject 组件 css 样式设置参数的对象,如不传该参数,所有属性使用默认值,如果只想修改某些 css 属性,只需要设置需要修改的属性即可,如: <GotoTopOrBottom :cssObj="{width: '30px', height: '30px'}" /> {
top: '50%',
right: '30px',
translateY: '-50%',
marginTop: '10px',
width: '40px',
height: '40px',
borderRadius: '50%',
backgroundColor: '#2c8ce6',
opacity: '.6',
sideMargin: '0px'
}
cssObj.topstring滚动图标距离页面顶部的距离,默认值50%,top: '50%' + translateY: '-50%' 为垂直居中'50%'
cssObj.rightstring滚动图标距离父容器或页面右边距的距离'30px'
cssObj.translateYstring滚动图标向上移动自身距离的一半'-50%'
cssObj.marginTopstring[回到底部]图标盒子顶部距离[回到顶部]图标底部的距离'10px'
cssObj.widthstring[回到顶/底部]单个滚动图标的宽度大小设置'40px'
cssObj.heightstring[回到顶/底部]单个滚动图标的高度大小设置'40px'
cssObj.borderRadiusstring滚动图标的四边角圆弧度设置,50%为正圆形'50%'
cssObj.backgroundColorstring滚动图标的颜色,默认为浅蓝色'#2c8ce6'
cssObj.opacitystring滚动图标的透明度设置'0.6'
cssObj.sideMarginstring拖拽滚动图标到上下左右边界时保留的间距值'0px'
     
animateObjobject组件滚动动画效果参数设置,如不传该参数,所有属性使用默认值,如果只想修改某些属性,只需要设置需要修改的属性即可,如: <GotoTopOrBottom :animateObj="{duration: 500}" /> {
enable: true,
duration: 300,
interval: 15,
}
animateObj.enableboolean是否开启缓慢滚动动画,不开启则立即一次性滚动到顶部/底部,默认开启true
animateObj.durationnumber动画时长,单位毫秒,默认值300毫秒,需开启动画才生效(animateObj.enable=true)。数字越大,滚动越慢,建议保留默认值即可300
animateObj.intervalnumber定时器控制多久滚动一次,单位毫秒,默认值15毫秒,需开启动画才生效(animateObj.enable=true)。数字越大,滚动越卡顿,建议保留默认值即可15
备注 animateObj.duration 和 animateObj.interval 参数可产生滚动次数(滚动多少次才能滚动到顶/底部);
滚动次数 = animateObj.duration / animateObj.interval
  • Events 使用说明
事件名类型是否可选说明
@topFinishedFunction点击[回到顶部]图标或滚动条滚动到顶部后,要调用的自定义事件回调函数
@bottomFinishedFunction点击[回到底部]图标或滚动条滚动到底部后,要调用的自定义事件回调函数
  • Preview(本组件使用效果预览图)
  • 本组件使用过程中的 GIF 动态效果图(图片经过压缩,视觉可能会有所模糊):

本组件使用动态效果图

  • 组件会根据当前浏览器使用的语言环境,如果是中文环境 ,则显示中文提示,否则显示英文提示,如下图:

本组件操作中文提示效果图

本组件操作英文提示效果图

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

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

相关文章

关于LLC知识10

在LLC谐振腔中能够变化的量 1、输入电压 2、Rac&#xff08;负载&#xff09; 所以增益曲线为红色&#xff08;Rac无穷大&#xff09;已经是工作的最大极限了&#xff0c;LLC不可能工作在红色曲线之外 负载越重时&#xff0c;增益曲线越往里面 假设&#xff1a; 输入电压…

谷歌反垄断案:美国科技史上最大的垄断诉讼与未来展望

引言 近年来&#xff0c;随着全球科技巨头的迅猛崛起&#xff0c;反垄断诉讼逐渐成为各国监管机构打击科技公司滥用市场地位的重要手段。美国作为全球科技产业的发源地&#xff0c;其对反垄断的关注也从未减弱。2023年&#xff0c;美国联邦法院针对谷歌发起的反垄断诉讼&#…

《Spring Cloud 微服务架构核心组件与 Nacos 配置管理详解》

微服务 1.SpringCloud中的核心组件 Spring Cloud Netflix组件 组件名称作用Eureka服务注册中心RibbonRibbonFeign声明式服务调⽤Hystrix客户端容错保护ZuulAPI服务⽹关 Spring Cloud Alibaba组件 组件名称作用Nacos服务注册中心Sentinel客户端容错保护 Spring Cloud原⽣及…

【python】JS逆向中,手把手教会你如何层层突破瑞数加密

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Python中matplotlib使用4

在matplotlib中&#xff0c;可以通过绘制“饼图”来展示各类别在总体中所占的比例。 1 绘制基本“饼图” 通过matplotlib中的pie()函数绘制饼图&#xff0c;代码如图1所示。 图1 绘制基本“饼图”的代码 从图1中可以看出&#xff0c;pie()函数的参数y即为要绘制的数据&#…

微服务的基本理解和使用

目录​​​​​​​ 一、微服务基础知识 1、系统架构的演变 &#xff08;1&#xff09;单体应用架构 &#xff08;2&#xff09;垂直应用架构 &#xff08;3&#xff09;分布式SOA架构 &#xff08;4&#xff09;微服务架构 &#xff08;5&#xff09;SOA与微服务的关系…

Qt 0821作业

一、思维导图

一种针对自然语言文本的提示策略

文章介绍了一种创新的提示策略&#xff0c;旨在利用大型语言模型从自然语言文本中提取业务流程相关信息&#xff0c;例如活动和参与者等&#xff0c;并建立它们之间的关系。通过这种方法&#xff0c;研究人员能够在无需大量数据的情况下实现高质量的信息提取&#xff0c;进而用…

Apache Commons-IO 库

Apache Commons-IO是Apache开源基金组织提供的一组有关IO&#xff08;Input/Output&#xff09;操作的小框架。这个库的主要目的是为了提高IO流的开发效率&#xff0c;减少在进行文件读写、目录遍历等操作时编写的样板代码量。通过使用Commons-IO库&#xff0c;开发者可以更加简…

为一个花店编写一个库存管理程序,花点库存的花用花的名称、颜色、单价和株的数量来表示。(可直接运行)

为一个花店编写一个库存管理程序&#xff0c;花点库存的花用花的名称、颜色、单价和株的数量来表示。 要求&#xff1a; &#xff08;1&#xff09;说明一个结构数组&#xff0c;存储库存的鲜花数据。 &#xff08;2&#xff09;编写一个函数input_data()&#xff0c;输入现…

【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)研究 -- 3GPP TR 36.763(四)

目录 8. 后续研究方向的建议 8.1 来自RAN1的建议 8.1.1 针对NR NTN和IoT NTN的共同增强建议 8.1.2 Release-17时间框架内RAN1建议的总结 8.2 来自RAN2的建议 关于卫星网络&#xff08;NTN&#xff09;的窄带物联网&#xff08;NB-IoT&#xff09;/增强型机器类型通信&#…

【论文阅读33】Deep learning optoacoustic tomography with sparse data

Deep learning optoacoustic tomography with sparse data 论文题目:基于稀疏数据的深度学习光声断层扫描 论文链接:Deep learning optoacoustic tomography with sparse data | Nature Machine Intelligence 代码链接:GitHub - ndavoudi/sparse_artefact_unet 数据链接…

鸿蒙Harmony实战开发:Arkts构造函数

构造函数 类声明可以包含用于初始化对象状态的构造函数。 构造函数定义如下&#xff1a; constructor ([parameters]) {// ... } typescript 如果未定义构造函数&#xff0c;则会自动创建具有空参数列表的默认构造函数&#xff0c;例如&#xff1a; class Point {x: numbe…

CH动画制作软件Win/Mac软件安装下载(附安装包)

目录 一、软件概述 1.1 软件简介 1.2 系统要求 二、安装步骤 2.1 下载软件 2.2 安装准备 2.3 安装过程 三、使用教程 3.1 创建新项目 3.2 角色制作 3.3 动画制作 四、高级功能与技巧 4.1 实时渲染技术 4.2 编程支持 4.3 协作与集成 一、软件概述 1.1 软件简介 …

linux 进程D状态的解决思路

同时做了录屏放到B站了&#xff0c;伙伴们视频给个3连支持一下 linux 进程D状态解决思路 1. 问题描述 在Linux系统环境&#xff0c;进程在内核模式下等待I/O完成时通常会进入不间断睡眠状态&#xff0c;此时使用ps或top命令输出的进程显示为D状态。当然我们也可以使用sysrq工具…

基于Python flask的图书借阅管理系统的设计与实现

基于Python Flask的图书借阅管理系统旨在为图书馆或类似机构提供一个高效、便捷的管理平台&#xff0c;覆盖图书借阅的各个环节&#xff0c;帮助管理员和读者更好地管理和使用图书资源。该系统采用Python编程语言和Flask框架进行开发&#xff0c;结合了数据库管理、用户认证、数…

数字图像处理【13】图像特征概述。

前言概述 打算用几篇文章回顾OpenCV特征模块&#xff08;features2d&#xff09;当中的对象检测&#xff08;object detection&#xff09;概念&#xff0c;以及主要的经典算法。这些传统的算法相对于现在来讲&#xff0c;可能有些过时&#xff0c;但对于初学者来说还是有必要…

netty编程之广播消息

写在前面 本文看下使用netty如何实现广播消息&#xff0c;主要依赖于类io.netty.channel.group.ChannelGroup。 1&#xff1a;正戏 首先定义server&#xff1a; package com.dahuyou.netty.broadcastmsg;import io.netty.bootstrap.ServerBootstrap; import io.netty.chann…

Midjourney中文版教程:参数详解

1.长宽比 可以设置图片的纵横比。按照需求可以选择不同的尺寸&#xff0c;也可以自定义。 注意&#xff1a;--ar必须使用整数。使用139&#xff1a;100代替1.39&#xff1a;1。 长宽比会影响生成图像的形状和构图。 在放大时&#xff0c;某些长宽比可能会稍微改变。 较旧的…

「字符串」详解AC自动机并实现对应的功能 / 手撕数据结构(C++)

前置知识 在此前&#xff0c;你应该首先了解trie树&#xff08;字典树&#xff09;的概念&#xff1a; 「字符串」详解Trie&#xff08;字典树|前缀树&#xff09;并实现对应的功能 / 手撕数据结构&#xff08;C&#xff09; 我们建议你先阅读这篇文章&#xff0c;以了解我们…