CSS3实现列表无限滚动/轮播

使用CSS3实现列表的无限滚动/轮播

效果预览

效果预览

思路

将当前列表滚动至最后一项的末尾,然后瞬间切换回第一项

问题点

  1. 用什么方式实现无限轮播
    这个问题就是列表滚动到最后时底部会留白(有多余空间)如何处理?
    列表的最后添加列表开头的重复项即可(如图中的10后面出现的1,2,3,4,5既为重复项)。
    重复项添加的数目要根据当前列表的高度和列表项的高度一起确定,例如:
    列表高度150px,列表项高度30px,则需要在当前列表尾部添加150 / 30 = 5项重复项才可以去除留白。

  2. 如何让用户无感知的切换回第一项
    添加好重复项之后控制好切换时机,当列表滚动到最后一项的末尾(重复项第一项的开头)时,立即进行切换。例如:
    列表项共10项,则让列表向上移动到10 * 30px = 300px时立即进行切换即可实现无感知切换

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>列表无限滚动</title>
</head>
<style>
    .container {
        position: relative;
        background-color: #a4ffcc;
        /* 父容器需要有明确的高度 */
        height: 150px;
        width: 200px;
        margin: auto;
        overflow: hidden;
    }

    .container > .scroll-list {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        animation: scroll 6s linear infinite normal;
    }

    .container > .scroll-list > div {
        width: 100%;
        /* 滚动的项目需要有具体的高度 */
        height: 30px;
        background-color: #1ea7ff;
        display: flex;
        justify-content: center;
        align-items: center;
        color: white;
    }

    .container > .scroll-list > div:nth-child(2n) {
        background-color: #18d9f8;
    }

    @keyframes scroll {
        100% {
            /* 需要滚动内容的总高度 */
            top: -300px;
        }
    }
</style>
<body>
    <div class="container">
        <div class="scroll-list">
            <div>1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
            <div>5</div>
            <div>6</div>
            <div>7</div>
            <div>8</div>
            <div>9</div>
            <div>10</div>
            <!-- 下面代码是为了让滚动内容能够多展示一屏(去除留白/无限轮播):数量请自行根据高度进行计算 -->
            <div>1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
            <div>5</div>
        </div>
    </div>
</body>
</html>
  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现CSS纵向无缝轮播滚动效果,你可以使用CSS的动画和关键帧来创建一个无限循环的滚动效果。下面是一个简单的示例代码,演示如何实现纵向无缝轮播滚动效果: HTML结构: ```html <div class="slider"> <div class="slide">Slide 1</div> <div class="slide">Slide 2</div> <div class="slide">Slide 3</div> </div> ``` CSS样式: ```css .slider { height: 200px; /* 设置容器高度 */ overflow: hidden; /* 隐藏溢出内容 */ } .slide { height: 200px; /* 设置每个滑块的高度,与容器高度一致 */ animation: slideUp 10s infinite; /* 使用slideUp动画,持续时间10秒,无限循环 */ } @keyframes slideUp { 0% { transform: translateY(0); } /* 初始位置 */ 25% { transform: translateY(-200px); } /* 向上移动一个滑块的高度 */ 50% { transform: translateY(-400px); } /* 向上移动两个滑块的高度 */ 75% { transform: translateY(-600px); } /* 向上移动三个滑块的高度 */ 100% { transform: translateY(0); } /* 返回初始位置,形成无缝滚动效果 */ } ``` 在上面的示例中,`.slider`元素是容器,设置了固定的高度,并且通过`overflow: hidden;`隐藏溢出内容。`.slide`元素是每个滑块,设置了相同的高度,并且应用了`slideUp`动画,持续时间为10秒,设置无限循环。 `@keyframes slideUp`定义了滑块的动画效果。使用`transform: translateY()`来实现向上移动滑块的效果。通过设置不同的百分比位置,可以控制滑块在不同阶段的位置,从而实现无缝滚动效果。 你可以根据自己的需求调整容器和滑块的高度、动画持续时间,以及滑块的移动距离,来实现自己想要的纵向无缝轮播滚动效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值