知识库:CSS3实现列表无限滚动/轮播效果

2024年03月04日 08:15:18益点益滴1343

效果预览

思路

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

问题点

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>

如果知识库:CSS3实现列表无限滚动/轮播效果没有解决您的问题,您还可以在CSS栏目中查看更多相关内容。

超赞,真给力!嗯,必须鼓励~

打赏 0
账号:mxy310@163.com[复制]
账号:77940140[复制]