vue中实现回到顶部功能

<img v-if="btnFlag" class="go-top" src="图片url" @click="backTop">

data () {
    return {
      scrollTop: 0
    }
  }
// vue的两个生命钩子,这里不多解释。
// window对象,所有浏览器都支持window对象。它表示浏览器窗口,监听滚动事件
mounted () {
  window.addEventListener('scroll', this.scrollToTop)
},
destroyed () {
  window.removeEventListener('scroll', this.scrollToTop)
},
 
 
methods: {
  // 点击图片回到顶部方法,加计时器是为了过渡顺滑
  backTop () {
      const that = this
      let timer = setInterval(() => {
        let ispeed = Math.floor(-that.scrollTop / 5)
        document.documentElement.scrollTop = document.body.scrollTop = that.scrollTop + ispeed
        if (that.scrollTop === 0) {
          clearInterval(timer)
        }
      }, 16)
  },
 
  // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
  scrollToTop () {
    const that = this
    let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
    that.scrollTop = scrollTop
    if (that.scrollTop > 60) {
      that.btnFlag = true
    } else {
      that.btnFlag = false
    }
  }
}
 

引用:

### 功能实现方案 在 Vue 3 应用中实现返回页面顶部功能,可以通过以下方式完成: #### 1. 使用 `window.scrollTo()` 方法 最基础的方式是使用 `window.scrollTo(x, y)` 方法,将页面滚动到指定位置。若需要平滑滚动,可以在 CSS 中设置 `scroll-behavior: smooth`。 ```vue <template> <button class="toTop" @click="toTop" :style="dynamicStyles">↑</button> </template> <script> export default { data() { return { dynamicStyles: { opacity: 0, }, }; }, mounted() { window.addEventListener("scroll", this.handleWindowScroll); }, beforeUnmount() { window.removeEventListener("scroll", this.handleWindowScroll); }, methods: { handleWindowScroll() { if (window.scrollY > document.documentElement.clientHeight / 2) { this.dynamicStyles.opacity = 1; } else { this.dynamicStyles.opacity = 0; } }, toTop() { window.scrollTo(0, 0); }, }, }; </script> <style> html { scroll-behavior: smooth; } .toTop { transition: 0.3s ease; position: fixed; bottom: 80px; right: 100px; display: block; background: #ffffff; width: 50px; height: 50px; text-align: center; line-height: 50px; border-radius: 100%; cursor: pointer; } </style> ``` #### 2. 使用自定义组件 `vue3-goto-top-or-bottom` 该组件由作者 `Samdy_Chan` 开发,支持自动检测父容器是否滚动并显示图标,同时支持点击按钮实现平滑滚动到顶部或底部。 ```vue <template> <GoTopBtn :top="20"> <p>↑</p> </GoTopBtn> </template> <script> import GoTopBtn from "vue3-goto-top-or-bottom"; export default { components: { GoTopBtn, }, }; </script> ``` #### 3. 动态控制按钮显示与隐藏 通过监听 `window.scrollY` 值来判断是否显示按钮。当用户滚动页面超过一定距离时,按钮逐渐显示;反之则隐藏。 ```javascript handleWindowScroll() { if (window.scrollY > document.documentElement.clientHeight / 2) { this.dynamicStyles.opacity = 1; } else { this.dynamicStyles.opacity = 0; } } ``` #### 4. 添加动画效果 在 CSS 中通过 `transition` 属性为按钮的透明度变化添加动画效果,使按钮显示和隐藏更加平滑。 ```css .toTop { transition: 0.3s ease; } ``` ### 优势与适用场景 - **简单直接**:适合不需要复杂交互的小型项目。 - **可扩展性强**:通过封装组件,可轻松在多个页面中复用。 - **兼容性好**:适用于主流浏览器,且对旧版浏览器也有良好支持。 ### 总结 在 Vue 3 中实现返回顶部功能,可以使用原生 `window.scrollTo()` 方法结合动态样式控制按钮的显示与隐藏,也可以借助现成的组件如 `vue3-goto-top-or-bottom` 来简化开发流程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值