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

Tailwind CSS中overflow-scroll横向滚动鼠标滚轮无法触发问题求助

问题截图

解决方案

1. 明确容器滚动方向

你当前使用的overflow-scroll类会同时允许水平和垂直方向滚动,建议先明确设置为仅水平可滚动,避免垂直滚动事件冲突:
将外层容器的类修改为 overflow-x-scroll overflow-y-hidden,同时可添加touch-pan-x适配移动端触摸滑动,添加scroll-smooth实现平滑滚动效果。

2. 添加滚轮事件处理逻辑

浏览器默认行为中,鼠标滚轮的垂直滚动量仅会触发垂直方向滚动,只有按住Shift键滚动时才会触发水平滚动。要实现直接滚动滚轮控制横向滚动,需要手动绑定onWheel事件处理:
首先定义事件处理函数:

const handleWheel = (e) => {
  // 阻止默认滚动行为,避免同时触发页面垂直滚动
  e.preventDefault();
  // 将垂直滚动偏移量赋值给水平滚动位置
  e.currentTarget.scrollLeft += e.deltaY;
}

修改后的外层容器完整代码:

<div 
  className="flex space-x-3 overflow-x-scroll overflow-y-hidden p-3 -ml-3 touch-pan-x scroll-smooth"
  onWheel={handleWheel}
>
  {cardsData?.map(({ img, title }) => (
    <MediumCard key={img} img={img} title={title} />
  ))}
</div>

3. 可选适配调整

如果不需要阻止页面垂直滚动,仅在容器滚动到边缘时才触发页面滚动,可以调整事件逻辑如下:

const handleWheel = (e) => {
  const container = e.currentTarget;
  const isScrollAtStart = container.scrollLeft === 0;
  const isScrollAtEnd = container.scrollLeft + container.clientWidth >= container.scrollWidth;
  
  // 只有在容器可滚动时才拦截默认行为
  if (!(e.deltaY < 0 && isScrollAtStart) && !(e.deltaY > 0 && isScrollAtEnd)) {
    e.preventDefault();
    container.scrollLeft += e.deltaY;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:06:08