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

如何实现悬停时图片多帧循环、离开恢复静态,且使用img标签而非div?

img标签实现悬停多帧循环切换效果

完全可以仅使用img标签实现需求,无需借助div背景方案,以下是可直接运行的完整实现:

完整代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>悬停帧动画</title>
    <style>
        /* 可选:固定图片尺寸避免帧切换时布局抖动 */
        #animImg {
            width: 300px;
            height: auto;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <!-- 直接使用img标签,默认加载第一帧静态图 -->
    <img id="animImg" src="https://i.sstatic.net/Nr2Xk.png" alt="帧动画">

    <script>
        // 配置项:动画帧列表、切换间隔(单位毫秒)
        const frameList = [
            "https://i.sstatic.net/Nr2Xk.png",
            "https://i.sstatic.net/yicji.png",
            "https://i.sstatic.net/3dGdm.png",
            "https://i.sstatic.net/LTQOv.png"
        ];
        const switchInterval = 200; // 可自行调整数值修改切换速度

        const imgDom = document.getElementById('animImg');
        let timer = null;
        let currentFrameIndex = 0;

        // 预加载所有图片帧,避免悬停时加载卡顿
        frameList.forEach(src => {
            const img = new Image();
            img.src = src;
        });

        // 鼠标悬停事件:启动帧循环
        imgDom.addEventListener('mouseenter', () => {
            timer = setInterval(() => {
                currentFrameIndex = (currentFrameIndex + 1) % frameList.length;
                imgDom.src = frameList[currentFrameIndex];
            }, switchInterval);
        });

        // 鼠标移出事件:停止循环,恢复默认静态图
        imgDom.addEventListener('mouseleave', () => {
            clearInterval(timer);
            timer = null;
            currentFrameIndex = 0;
            imgDom.src = frameList[0];
        });
    </script>
</body>
</html>

实现逻辑说明

  • 默认状态下img标签加载列表第一帧作为静态展示图
  • 鼠标进入img区域时启动定时器,按设定间隔循环切换src属性为后续帧
  • 鼠标移出时清空定时器,重置src为第一帧静态图
  • 提前预加载所有图片帧,避免首次切换时出现加载空白

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:54:02