找回密码
 立即注册
搜索
查看: 10|回复: 0

纯CSS实现多图无限平滑循环滚动(通用方法)(有代码)转自马黑教程专版

[复制链接]

1498

主题

3188

回帖

1万

积分

管理员

积分
12841
发表于 昨天 20:10 | 显示全部楼层 |阅读模式

核心原理解释(以水平方向滚动为例):

  1. HTML标签结构:父容器 + 子容器(子容器装载双份相同的图片标签)
  2. 父容器固定宽高,相对定位
  3. 子容器绝对定位,高度100%,设置为不折行(white-space: nowrap;);
  4. 图片高度100%,需要双份相同的图片标签;
  5. 子容器 animation 属性无限循环运行关键帧动画;
  6. 关键帧动画使用 transform: translateX(-50%) 作为移动终点(子容器移动一半时,后续相同的图片标签跟在后面形成衔接而非断档——具体情况是与下一轮开始瞬间的图片重叠,达成无缝交替效果)。

应用实例:

<style>
    .pa {
        width: 1024px;
        height: 600px;
        border: 8px dotted gray;
        overflow: hidden; /* 重要 :屏蔽溢出 */
        position: relative; /* 重要 :相对定位 */
        margin: auto;
        --state: running; /* 动画开关 */
    }
    .pa:hover {
        --state: paused; /* 鼠标指针移动到 .pa 时暂停动画 */
    }
    .son {
        position: absolute; /* 重要 :绝对定位 */
        height: 100%; /* 百分百高度 */
        white-space: nowrap; /* 重要 :不折行,水平伸展 */
        /* 动画周期时长应根据图片水平衔接的长度调整 */
        animation: scroll 28s linear infinite var(--state);
    }
    .son img {
        height: 100%; /* 图片高度与容器一致(宽度自适应)*/
        margin: 0 6px; /* 图片之间的左右距离 */
    }
    @keyframes scroll {
        to { transform: translateX(-50%); }
    }
</style>

<div class="pa">
    <div class="son">
        <!-- 双份一模一样的图片标签 -->
        <img src="https://638183.freep.cn/638183/Pic/38/3-1.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-2.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-3.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-4.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-5.jpg" load="lazy" alt="" />
        
        <img src="https://638183.freep.cn/638183/Pic/38/3-1.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-2.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-3.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-4.jpg" load="lazy" alt="" />
        <img src="https://638183.freep.cn/638183/Pic/38/3-5.jpg" load="lazy" alt="" />
    </div>
</div>
<p style="text-align: center;">鼠标指针移动到上面方框可暂停动画</p>
    

【说明】

  1. img标签 load="lazy" 属性设置意为图片懒加载,这对需要展示大量的图片时有节能作用:图片尚未进入屏幕可视区域时暂时不予加载,直到它们移动到可视区域;
  2. 需要自左向右滚动图片的,改造关键帧动画如下:
    @keyframes scroll {
        from { transform: translateX(-50%); }
        to { transform: translateX(0%); }
    }
    
  3. 需要图片在垂直方向上滚动的,可参照本示例做些必要的改造。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

协同嘉业科技有限公司 ( 京ICP备2024053108号-1 )

GMT+8, 2026-8-6 06:35 , Processed in 0.085958 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表