无限循环滚动条 - 左出右进

做一个可以无限循环, 左出右进效果的滚动条,效果如下:

1. 核心原理

无限循环滚动条的核心原理是通过两个相同的子元素(或内容)不断向某一方向移动,当其中一个子元素完全移出父容器时(-100%处),立即将其重置到起始位置,从而实现无缝循环滚动的效果。

初始状态:子元素A和B水平排列,A在父容器内,B在右侧。

动画开始:A和B同时向左移动。

当A完全移出父容器时,B已经占满父容器。

A被重置到B的右侧,继续向左移动,形成无限循环。

2. 实现步骤(Next+css)

2.1 HTML结构

创建父容器和两个相同的子元素:

jsx 复制代码
            <div className="overflow-hidden w-[500px]">
                <div className="flex justify-start w-full" >
                    
                    // 元素 A
                    <div 
                    className={`${styles["animate-slide-left"]} flex gap-2`} 
                    style={{ animationDuration: `${duration}s` }}>
                        {children}
                    </div>
                    // 元素 B
                    <div 
                    className={`${styles["animate-slide-left"]} flex gap-2`} 
                    style={{ animationDuration: `${duration}s` }}>
                        {children}
                    </div>
                    
                </div>
            </div>
  • 父容器:用于限制显示区域,并隐藏溢出部分。
  • 子元素:两个相同的内容,分别用于滚动和重置。

2.2 CSS样式

设置父容器和子元素的样式,并定义滚动动画:

css 复制代码
.animate-slide-left {
    display: flex;
    animation: slide-left 30s linear infinite;
    animation-duration: 30s;
    animation-delay: 3s;
    width: max-content;
}

@keyframes slide-left {
    from {
        transform: translateX(0);
    }
    to {
        transform: translateX(-100%);
    }
}
  • 要点

    • 子元素的宽度必须大于等于父容器,否则会出现空白或重叠。
    • 动画时间可以根据需要调整,控制滚动速度。

3. 注意事项

3.1 子元素长度

  • 子元素的长度必须至少等于父容器的宽度,否则会出现空白区域。
  • 如果子元素内容较短,可以通过重复内容或增加空白填充来占满父容器。

3.2 动画性能

  • 使用CSS动画(transform)而不是leftmargin,以提高性能。
  • 避免在低性能设备上使用过于复杂的动画。

3.3 浏览器兼容性

  • 测试不同浏览器的兼容性,确保动画效果一致。
  • 如果需要支持旧版浏览器,可以添加webkit-moz-前缀。
相关推荐
mCell2 小时前
AI 时代 SVG 画图的潜力
前端·agent·svg
我命由我123458 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
Hopebearer_9 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
东风破_9 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
圣殿骑士-Khtangc11 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
BigTopOne11 小时前
【ijkplayer】 硬解码流程
前端
kyriewen12 小时前
DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
前端·ai编程·deepseek
捡田螺的小男孩12 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒12 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端
90后的晨仔12 小时前
uni-app 路由跳转与页面导航 —— 终极详解(对标 iOS / Android / 鸿蒙三端原生)
前端