You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React应用中如何判断用户已滚动至屏幕25%位置

核心判定逻辑

25%滚动节点的计算逻辑非常明确,你只需要用以下公式计算触发阈值即可:

触发阈值 = (页面总高度 - 窗口可视高度) * 0.25
当当前滚动距离window.scrollY大于等于触发阈值时,就代表用户滚动到了指定位置。

React 最简实现方案

用useEffect绑定滚动监听,搭配防抖优化性能,完整示例代码如下:

import { useState, useEffect } from 'react'

function App() {
  const [showModal, setShowModal] = useState(false)

  useEffect(() => {
    // 防抖函数,避免滚动事件频繁触发判断
    let timer = null
    const handleScroll = () => {
      if (timer) clearTimeout(timer)
      timer = setTimeout(() => {
        // 已经触发过弹窗就不再判断,可根据需求调整
        if (showModal) return
        const totalScrollable = document.body.scrollHeight - window.innerHeight
        const triggerPoint = totalScrollable * 0.25
        if (window.scrollY >= triggerPoint) {
          setShowModal(true)
        }
      }, 100)
    }

    window.addEventListener('scroll', handleScroll)
    // 组件卸载时移除监听,避免内存泄漏
    return () => {
      window.removeEventListener('scroll', handleScroll)
      if (timer) clearTimeout(timer)
    }
  }, [showModal])

  return (
    <div style={{height: '200vh'}}>
      {/* 你的页面内容 */}
      {showModal && <div>这里是你的弹窗组件</div>}
    </div>
  )
}

export default App
适配场景调整
  • 如果你是在页面内的局部滚动容器中实现该逻辑,只需要将window替换为对应滚动容器的DOM实例,通过useRef绑定容器即可,对应参数调整为:
    容器可滚动高度 = 容器scrollHeight - 容器clientHeight
    容器滚动距离 = 容器scrollTop
  • 如果需要滚动到当前视口高度的25%(而非总可滚动高度的25%),直接把触发阈值改成window.innerHeight * 0.25即可。

内容的提问来源于stack exchange,提问作者Attiq Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:54:01