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

React中如何通过useRef的scrollLeft实现平滑水平滚动?

React水平滑块点击平滑滚动实现方案

直接修改scrollLeft属性无法触发平滑动画,原因是scroll-behavior: smooth CSS属性仅对通过导航操作、scrollTo/scrollBy方法或键盘触发的滚动生效,同步赋值scrollLeft属于直接修改DOM属性,不会触发浏览器的平滑滚动逻辑。

你可以把原有逻辑替换为使用scrollTo或scrollBy方法,这两个方法支持配置behavior: 'smooth'来实现平滑滚动:

方案一:使用scrollTo

const scrollX = (direction = 'right') => {
  if (sliderRef.current) {
    const { clientWidth, scrollLeft } = sliderRef.current;
    const targetScrollLeft = direction === 'right' 
      ? scrollLeft + clientWidth 
      : scrollLeft - clientWidth;
    
    sliderRef.current.scrollTo({
      left: targetScrollLeft,
      behavior: 'smooth'
    });
  }
};

方案二:使用scrollBy(更简洁)

const scrollX = (direction = 'right') => {
  if (sliderRef.current) {
    const scrollOffset = direction === 'right' 
      ? sliderRef.current.clientWidth 
      : -sliderRef.current.clientWidth;
    
    sliderRef.current.scrollBy({
      left: scrollOffset,
      behavior: 'smooth'
    });
  }
};

替换后点击滑块控制按钮就能得到你想要的平滑滚动效果,无需额外依赖第三方库,原生API即可实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:33:13