原生javascript实现无间缝滚动示例


下面是一个使用原生JavaScript实现无间缝滚动的简单示例。这个示例中,我们将创建一个包含多个子元素的容器,并让这些子元素在水平方向上无间缝滚动。

HTML部分:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>无缝滚动示例</title>
<style>
  #scrollContainer {
    width: 100%;
    overflow: hidden;
    white-space: nowrap;
    box-sizing: border-box;
  }
  .scrollItem {
    display: inline-block;
    width: 100px; /* 假设每个滚动项宽度为100px */
    height: 100px; /* 假设每个滚动项高度为100px */
    background-color: lightblue;
    margin-right: 10px; /* 间隔 */
    text-align: center;
    line-height: 100px; /* 垂直居中 */
  }
</style>
</head>
<body>
<div id="scrollContainer">
  <div class="scrollItem">1</div>
  <div class="scrollItem">2</div>
  <div class="scrollItem">3</div>
  <!-- 复制前面的元素以实现无缝滚动 -->
  <div class="scrollItem">1</div>
  <div class="scrollItem">2</div>
  <div class="scrollItem">3</div>
</div>

<script>
// JavaScript代码将放在这里
</script>
</body>
</html>

JavaScript部分:


document.addEventListener('DOMContentLoaded', function() {
  const scrollContainer = document.getElementById('scrollContainer');
  let scrollLeft = 0;

  function scrollAnimation() {
    // 计算滚动距离,确保无缝
    const totalWidth = scrollContainer.scrollWidth - scrollContainer.clientWidth;
    if (scrollLeft >= totalWidth) {
      scrollLeft = 0; // 重置滚动位置
    }
    scrollContainer.scrollLeft += 1; // 每次滚动1px
    scrollLeft = scrollContainer.scrollLeft;

    // 使用requestAnimationFrame来平滑滚动
    requestAnimationFrame(scrollAnimation);
  }

  // 开始滚动
  scrollAnimation();
});

在这个示例中,我们创建了一个`#scrollContainer`容器,里面放置了若干`.scrollItem`元素,并在末尾复制了前面的元素以实现无缝滚动。JavaScript部分通过`requestAnimationFrame`函数来不断改变`#scrollContainer`的`scrollLeft`属性,从而实现平滑的无缝滚动效果。

请注意,这个示例是基于水平滚动的。如果你需要垂直滚动,可以相应地调整CSS和JavaScript代码。