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

为何div内部存在滚动条时window.scrollX无法获取正确滚动值?

问题根因

window.scrollX 只能获取浏览器窗口(window视口)本身的横向滚动距离。你当前的滚动条是加在.Parent容器上的,页面整体没有产生横向滚动,所以读window的滚动值会一直返回0。

正确实现方式

你已经把scroll事件绑定在了.Parent元素上,直接读取这个DOM元素自身的scrollLeft属性,就能拿到容器内部的横向滚动偏移值。
修正后的组件代码如下:

const Bar = (props) => {
    
     useEffect(() => {
        const barParent = document.querySelector('div.Parent');
        const onContainerScroll = () => {
            // 读取滚动容器自身的横向偏移量
            const scrollPosition = Math.ceil(barParent.scrollLeft);
            console.log("scroll  " + scrollPosition);
        }

        barParent.addEventListener("scroll", onContainerScroll);
        // 组件卸载时移除事件监听,避免内存泄漏
        return () => barParent.removeEventListener("scroll", onContainerScroll);
    }, [])

    const barArray = [];
    for (let i = 0; i < 200; i++) {
        // 补充循环项的key属性,消除React警告
        barArray.push(<div className='BarBody' key={i}></div>);
    }

    return (
        <div className='Parent'>
            {barArray}
        </div>
    )
}
补充说明
  • 你原来的CSS代码不需要做任何修改,样式逻辑是正常的。
  • 普通DOM容器的滚动偏移:横向滚动值读scrollLeft,纵向滚动值读scrollTop,只有滚动发生在window视口本身时,才用window.scrollX/window.scrollY取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:15:41