【功能实现】如何实现点击后跳转到顶部??

📢博客主页:逆旅行天涯-CSDN博客
📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!

🌰 本次需求:

1.右侧固定悬浮按钮,点击后可以跳转到顶部

2.右侧的悬浮按钮可以像滚动条一样显示当前进度


在Vue 3中实现点击后跳转到页面顶部的功能,通常不需要复杂的逻辑,因为你可以直接操作window.scrollTo方法来实现。这里有几个步骤和示例代码,帮助你实现这个功能。

1. 创建一个按钮用于触发跳转

首先,在你的Vue组件的模板部分,添加一个按钮用于用户点击。你可以为这个按钮绑定一个点击事件处理器。

<template>  
  <div>  
    <!-- 其他内容 -->  
    <button @click="scrollToTop">回到顶部</button>  
  </div>  
</template>

2. 编写点击事件处理器

然后,在你的组件的setup函数中(或者在<script setup>标签内,如果你使用的是Vue 3的Composition API的语法糖),编写一个方法来处理点击事件。这个方法将使用window.scrollTowindow.scroll(取决于你的具体需求)来滚动到页面顶部。

使用window.scrollTo
<script setup>  
function scrollToTop() {  
  // 平滑滚动到页面顶部  
  window.scrollTo({  
    top: 0,  
    behavior: 'smooth', // 平滑滚动  
  });  
}  
</script>
或者,使用window.scroll(对于简单的滚动)
<script setup>  
function scrollToTop() {  
  // 直接滚动到页面顶部,没有平滑效果  
  window.scroll(0, 0);  
}  
</script>

3. 实现悬浮按钮显示进度

<template>
    <div class="cats" :style="{ top: catsTop }" ref="cats" @click="catTop"></div>
</template>

<script lang="ts" setup>
	import { ref,onMounted,onUnmounted,nextTick } from 'vue';
    const cats = ref<HTMLElement | null>(null);  
    const catsTop = ref('-80px')
    let doctH = 0 // 文档高度
    let viewH = 0 // 可视区域高度
 
    //点击后跳转至顶部
    const catTop = () => {
        document.documentElement.scrollTop = document.body.scrollTop = 0
    }
    
	//滚动时运行代码,用于计算滚动位置
    const calcScroll = () => {
        const scroll = document.documentElement.scrollTop || document.body.scrollTop
        const hideH = doctH - viewH
        let rate = scroll / hideH
		if(rate>=1){
			rate=1
		}
		// console.log(rate);
        const result = Math.floor(viewH * rate)
        catsTop.value = `${result - 128}px`
        doctH === scroll + viewH ? cats.value?.classList.add('bottom') : cats.value?.classList.remove('bottom')
    }

    onMounted(async () => {
		await nextTick(() => {
			//将浏览器视口中可视区域的高度(不包括滚动条、工具栏等)赋值给变量 doctH
            doctH = document.body.clientHeight
			//获取浏览器视口高度的标准属性
            viewH = window.innerHeight || document.documentElement.clientHeight
			console.log(doctH,viewH);
            window.addEventListener('scroll', calcScroll)
        })
    })

    onUnmounted(() => {
        window.removeEventListener('scroll', calcScroll)
		
    })
</script>

<style scoped>
/* 回到顶部 - 小猫咪 */
.cats {
    position: fixed;
    right: 56px;
    top: -80px;
    z-index: 9999;
    width: 64px;
    height: 64px;
    transform: translateX(50%);
    background: url('@/assets/images/cat.png') no-repeat center center / contain;
    cursor: pointer;
}

.cats::after {
    position: absolute;
    content: '到底啦~';
    right: 55%;
    top: -110%;
    width: 100px;
    height: 100px;
    display: flex;
    justify-content: center;
    align-items: center;
    background: url('@/assets/images/cat-word.png') no-repeat center center / contain;
    font-size: 14px;
    color: rgb(57, 197, 187);
    padding-top: 6px;
    box-sizing: border-box;
    opacity: 0;
    transition: all .2s ease-in-out;
    pointer-events: none;
}

.cats.bottom::after {
    opacity: 1;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值