vue3 计算滚动条的滚动距离

p1:在 onMounted 钩子函数中,监听滚动条事件(点语法+toRefs

<template>
  <div style="width:3000px;height:3000px" >
    <p>onscrollLeft:{{ x }}</p>
    <p>onscrollTop:{{ y }}</p>
  </div>
</template>

<script>
import { onMounted, reactive } from 'vue-demi'
import { toRefs } from '@vueuse/core'

export default {
  setup () {
    // 1.定义初始变量,用 reactive 函数变成响应式数据
    const scrollObj = reactive({
      x: 0,
      y: 0
    })
    // 2.在 onMounted 钩子函数中 触发滚动条事件
    onMounted(() => {
      window.onscroll = () => {
        // 3.获取值,取整
        scrollObj.x = parseInt(document.documentElement.scrollLeft)
        scrollObj.y = parseInt(document.documentElement.scrollTop)
      }
    })
    // 4. 使用 toRefs() return 出去
    return { ...toRefs(scrollObj) }
  }
}
</script>

p2:在 onMounted 钩子函数中,监听滚动条事件(addEventListener+ref

<template>
  <div style="width:3000px;height:3000px" >
    <p>onscrollLeft:{{ x }}</p>
    <p>onscrollTop:{{ y }}</p>
  </div>
</template>

<script>
import { onMounted, ref } from 'vue'
export default {
  setup () {
    // 1.定义初始变量,用 ref 函数变成响应式数据
    const x = ref(0)
    const y = ref(0)
    // 2.在 onMounted 钩子函数中 触发滚动条事件
    onMounted(() => {
      window.addEventListener('scroll', () => {
        // 3.获取值,取整
        x.value = parseInt(document.documentElement.scrollLeft)
        y.value = parseInt(document.documentElement.scrollTop)
      })
    })
    // 4.return 出去
    return { x, y }
  }
}
</script>

p3:利用第三方: vueuse/core重构

vueuse/core : 组合式API常用复用逻辑的集合

<template>
  <div style="width: 3000px; height: 3000px">
    <p>onscrollLeft:{{ x }}</p>
    <p>onscrollTop:{{ y }}</p>
  </div>
</template>

<script>
// 1.下包 yarn add @vueuse/core@5.3.0(重构)
// 2.导入 useWindowScroll 函数
import { useWindowScroll } from '@vueuse/core'
export default {
  setup () {
    // 3.解构赋值
    // const { x } = useWindowScroll()
    // const { y } = useWindowScroll()
    const { x, y } = useWindowScroll()
    // 4.return 出去,就可以直接使用
    return { x, y }
  }
}
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值