vue判断滚动条上下拉及是否在顶部

文章介绍了在Vue应用中,通过`useScroll`库和直接监听DOM的scroll事件两种方式来检测滚动状态并控制导航栏显示。第一种方法使用了vueuse库,第二种则是基于composition-api的直接DOM操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方式1. 使用useScroll方式

import { useScroll } from '@vueuse/core'
setup() {
    const showNaviBar = ref(true)
    const { arrivedState } = useScroll(document.querySelector('.body'), {
      onScroll: (e) => {
        console.log(arrivedState.top, arrivedState.bottom)
        if (arrivedState.top) {// 在顶部
          showNaviBar.value = true
          return
        }
        if (arrivedState.bottom) {// 到底
          showNaviBar.value = false
        } else {
          showNaviBar.value = true// 其它情况..
        }
      },
    })
    return {
    	showNaviBar,
	}
 }

方式2. 直接监听dom的scroll事件

import { ref, onBeforeUnmount, onMounted } from '@vue/composition-api'
setup() {
    const showNaviBar = ref(true)
    const scrollNum = ref(0)
    const handleScroll = (e) => {
      const scrollElement = e.target
      const scrollTop = scrollElement.scrollTop
      const scroll = scrollTop - scrollNum.value
      scrollNum.value = scrollTop
      console.log(scrollTop, scroll)
      if (scrollTop === 0) {// 在顶部,不滚动的情况
        showNaviBar.value = false
        return
      }
      if (scroll >= 0) { // 在滚动时,向下
        showNaviBar.value = false
      } else {// 在滚动时,向上
        showNaviBar.value = true
      }
    }
    onMounted(() => {  
      const scrollElement = document.querySelector('.body')
      scrollElement.addEventListener('scroll', handleScroll)
    })
    onBeforeUnmount(() => {  
      const scrollElement = document.querySelector('.body')
      scrollElement.removeEventListener('scroll', handleScroll)
      showNaviBar.value = true
    })
    return {
    	showNaviBar,
	}
 }
handleScroll 打印日志: down
2582 23
2601 19
2614 13
2623 2
handleScroll 打印日志: up
2787 -13
2773 -14
2728 -8
2724 -4
Vue判断滚动条是否到达底部,可以通过监听元素的滚动事件,并检查滚动条的位置是否达到了内容的底部。以下是一个简单的实现方法: 1. 首先,在Vue组件中添加一个ref引用到需要监听的元素。 2. 然后,在mounted生命周期钩子中添加一个滚动事件监听器。 3. 在事件处理函数中,检查滚动条的位置。 以下是一个示例代码: ```vue <template> <div ref="scrollContainer" class="scroll-container"> <!-- 内容 --> </div> </template> <script> export default { name: 'ScrollDetector', mounted() { this.$refs.scrollContainer.addEventListener('scroll', this.handleScroll); }, methods: { handleScroll() { const container = this.$refs.scrollContainer; if (container.scrollTop + container.clientHeight >= container.scrollHeight) { // 滚动条到达底部 console.log('滚动条到达底部'); // 在这里可以添加触底后的逻辑 } } }, beforeUnmount() { this.$refs.scrollContainer.removeEventListener('scroll', this.handleScroll); } } </script> <style> .scroll-container { max-height: 400px; overflow-y: auto; } </style> ``` 在这个示例中: 1. 我们使用`ref="scrollContainer"`来引用需要监听的容器元素。 2. 在`mounted`生命周期钩子中,我们添加了一个滚动事件监听器。 3. `handleScroll`方法中,我们检查`scrollTop + clientHeight`是否大于或等于`scrollHeight`。如果是,则表示滚动条已经到达底部。 4. 在`beforeUnmount`生命周期钩子中,我们移除了滚动事件监听器以防止内存泄漏。 通过这种方式,我们可以在Vue中轻松地检测滚动条是否到达底部,并在需要时执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值