当前位置:首页 > JavaScript

js实现div循环播放

2026-03-01 18:09:23JavaScript

实现 div 循环播放的方法

使用 CSS 动画和 JavaScript 控制

通过 CSS 定义动画效果,JavaScript 控制循环逻辑。以下是实现代码:

<style>
  .slider {
    width: 100%;
    overflow: hidden;
    position: relative;
  }
  .slider-content {
    display: flex;
    transition: transform 0.5s ease;
  }
  .slide {
    min-width: 100%;
    box-sizing: border-box;
  }
</style>

<div class="slider">
  <div class="slider-content">
    <div class="slide">Slide 1</div>
    <div class="slide">Slide 2</div>
    <div class="slide">Slide 3</div>
  </div>
</div>

<script>
  const sliderContent = document.querySelector('.slider-content');
  const slides = document.querySelectorAll('.slide');
  let currentIndex = 0;

  function nextSlide() {
    currentIndex = (currentIndex + 1) % slides.length;
    sliderContent.style.transform = `translateX(-${currentIndex * 100}%)`;
  }

  setInterval(nextSlide, 3000);
</script>

纯 JavaScript 实现

不依赖 CSS 动画,完全通过 JavaScript 控制:

const container = document.getElementById('slider-container');
const slides = container.querySelectorAll('.slide');
let currentIndex = 0;

function showSlide(index) {
  slides.forEach((slide, i) => {
    slide.style.display = i === index ? 'block' : 'none';
  });
}

function autoRotate() {
  currentIndex = (currentIndex + 1) % slides.length;
  showSlide(currentIndex);
}

showSlide(0);
setInterval(autoRotate, 2000);

使用 requestAnimationFrame

更平滑的动画效果实现方式:

const slider = document.querySelector('.slider');
const content = document.querySelector('.slider-content');
const items = document.querySelectorAll('.slider-item');
const itemWidth = items[0].offsetWidth;
let position = 0;
let animationId;

function animate() {
  position -= 1;
  if (position < -itemWidth) {
    position = 0;
    content.appendChild(content.firstElementChild);
  }
  content.style.transform = `translateX(${position}px)`;
  animationId = requestAnimationFrame(animate);
}

function startAnimation() {
  if (!animationId) {
    animate();
  }
}

function stopAnimation() {
  cancelAnimationFrame(animationId);
  animationId = null;
}

startAnimation();

无限循环的克隆方法

通过克隆元素实现无缝循环:

js实现div循环播放

const slider = document.querySelector('.slider');
const content = document.querySelector('.slider-content');
const items = document.querySelectorAll('.slider-item');

// 克隆第一个元素并添加到末尾
content.appendChild(items[0].cloneNode(true));

let currentPosition = 0;
const itemWidth = items[0].offsetWidth;

function slide() {
  currentPosition -= 1;
  content.style.transform = `translateX(${currentPosition}px)`;

  if (currentPosition <= -itemWidth) {
    currentPosition = 0;
    // 移动第一个元素到最后
    content.appendChild(content.firstElementChild);
    content.style.transform = 'translateX(0)';
  }

  requestAnimationFrame(slide);
}

slide();

每种方法适用于不同场景,CSS 动画方法简单高效,纯 JavaScript 方法兼容性更好,requestAnimationFrame 适合需要精细控制的场景,克隆方法可以实现完美的无缝循环效果。

标签: jsdiv
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…