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

Tailwind hover:pause移动端动画恢复异常,求触摸松开即恢复方案

解决移动端触摸动画后无法自动恢复的问题

问题核心是移动端浏览器会将单次点击模拟为hover状态,导致hover:pause的暂停效果会一直保持,直到用户点击其他区域。要实现触摸时暂停、松开时恢复,需要结合JavaScript监听触摸事件来控制动画状态。

步骤1:给滑块元素添加可识别的标识

修改你的className,增加一个ID或者类名方便JS选择元素:

<div className="animate-infinite-slider hover:pause" id="infinite-slider">
  <!-- 滑块内容 -->
</div>

步骤2:添加触摸事件监听代码

在页面中加入以下JavaScript代码,监听触摸开始和结束事件:

const slider = document.getElementById('infinite-slider');

// 触摸开始时暂停动画
slider.addEventListener('touchstart', () => {
  slider.classList.add('pause');
});

// 触摸结束时恢复动画
slider.addEventListener('touchend', () => {
  slider.classList.remove('pause');
});

为什么hoverOnlyWhenSupported无效?

这个配置是用来在不支持hover的设备上禁用hover样式,但移动端浏览器是支持hover模拟的(通过点击触发),所以这个配置不会改变当前的问题表现。

框架适配(以React为例)

如果你使用React等前端框架,可以用Ref和生命周期钩子实现相同逻辑:

import { useEffect, useRef } from 'react';

function InfiniteSlider() {
  const sliderRef = useRef(null);

  useEffect(() => {
    const slider = sliderRef.current;
    if (!slider) return;

    const handleTouchStart = () => slider.classList.add('pause');
    const handleTouchEnd = () => slider.classList.remove('pause');

    slider.addEventListener('touchstart', handleTouchStart);
    slider.addEventListener('touchend', handleTouchEnd);

    return () => {
      slider.removeEventListener('touchstart', handleTouchStart);
      slider.removeEventListener('touchend', handleTouchEnd);
    };
  }, []);

  return (
    <div ref={sliderRef} className="animate-infinite-slider hover:pause">
      {/* 滑块内容 */}
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:21:06