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

JavaScript实现溢出文本无限左右滚动及scrollWidth返回0问题求解

问题解决方案

你遇到的scrollWidth返回0的核心原因是选择器不匹配:你JS代码中查询的.chart_movement类在你提供的HTML、CSS代码中均不存在,查询到的是无效空元素,读取属性自然返回0。

除此之外还有多处逻辑需要调整才能实现预期效果,完整修正方案如下:

1. 修正后的CSS代码

/* 外层容器 */
.chartTitleGuide {
  width: 185px;
  position: relative; /* 作为文本的定位父级 */
  white-space: nowrap;
  overflow: hidden;
  margin: 0 auto;
}
/* 滚动文本元素 */
.chart_movement_text {
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  letter-spacing: 0.5px;
}

2. 修正后的JS代码

// 等待DOM完全渲染完成后再执行,避免拿不到元素尺寸
$(function() {
  // 遍历每个标题容器单独判断,适配多实例场景
  $(".chartTitleGuide").each(function() {
    const $container = $(this);
    const $text = $container.find(".chart_movement_text");
    const containerWidth = $container.width();
    const textWidth = $text[0].scrollWidth;
    // 只有文本宽度大于容器宽度时才启动滚动
    if (textWidth > containerWidth) {
      const offset = textWidth - containerWidth + 10; // 额外加10px留白避免贴边
      function startScroll() {
        $text
          .animate({ left: -offset }, 5000)
          .delay(1200)
          .animate({ left: 0 }, 5000)
          .delay(1200, startScroll); // 循环调用实现无限滚动
      }
      startScroll();
    }
  })
})

调整说明

  • 容器的position改为relative作为文本的定位父级,给文本加absolute定位才能触发left属性动画
  • 滚动距离根据文本实际超出宽度动态计算,不用写死固定值,适配不同长度的文本
  • 逻辑放在DOM加载完成的回调中,避免元素还没渲染就读取尺寸导致拿到错误值
  • 遍历每个容器单独做判断,避免多个标题实例互相影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:54:03