当前位置:首页 > JavaScript

js实现div轮播

2026-01-30 11:08:07JavaScript

实现基础轮播结构

HTML部分需创建一个包含轮播项的容器及导航按钮:

<div class="slider-container">
  <div class="slider-track">
    <div class="slide-item">Slide 1</div>
    <div class="slide-item">Slide 2</div>
    <div class="slide-item">Slide 3</div>
  </div>
  <button class="prev-btn">❮</button>
  <button class="next-btn">❯</button>
</div>

CSS部分设置布局与动画效果:

.slider-container {
  position: relative;
  width: 600px;
  height: 300px;
  overflow: hidden;
}
.slider-track {
  display: flex;
  transition: transform 0.5s ease;
}
.slide-item {
  min-width: 100%;
  height: 100%;
  background: #f0f0f0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 2rem;
}
button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 10;
}
.prev-btn { left: 10px; }
.next-btn { right: 10px; }

核心JavaScript逻辑

初始化变量并实现滑动功能:

const track = document.querySelector('.slider-track');
const slides = Array.from(document.querySelectorAll('.slide-item'));
const nextBtn = document.querySelector('.next-btn');
const prevBtn = document.querySelector('.prev-btn');

let currentIndex = 0;
const slideWidth = slides[0].getBoundingClientRect().width;

const updateSlidePosition = () => {
  track.style.transform = `translateX(-${currentIndex * slideWidth}px)`;
};

nextBtn.addEventListener('click', () => {
  currentIndex = (currentIndex + 1) % slides.length;
  updateSlidePosition();
});

prevBtn.addEventListener('click', () => {
  currentIndex = (currentIndex - 1 + slides.length) % slides.length;
  updateSlidePosition();
});

自动轮播功能

添加定时自动切换功能:

let autoSlideInterval;

const startAutoSlide = (interval = 3000) => {
  autoSlideInterval = setInterval(() => {
    currentIndex = (currentIndex + 1) % slides.length;
    updateSlidePosition();
  }, interval);
};

const stopAutoSlide = () => {
  clearInterval(autoSlideInterval);
};

// 鼠标悬停时暂停轮播
track.parentElement.addEventListener('mouseenter', stopAutoSlide);
track.parentElement.addEventListener('mouseleave', () => startAutoSlide());

// 初始化自动轮播
startAutoSlide();

无限循环优化

克隆首尾元素实现无缝循环:

js实现div轮播

const setupInfiniteSlide = () => {
  const firstClone = slides[0].cloneNode(true);
  const lastClone = slides[slides.length - 1].cloneNode(true);

  track.appendChild(firstClone);
  track.insertBefore(lastClone, slides[0]);

  track.style.transform = `translateX(-${slideWidth}px)`;
};

setupInfiniteSlide();

// 修改切换逻辑处理克隆节点
nextBtn.addEventListener('click', () => {
  if (currentIndex >= slides.length - 1) return;
  currentIndex++;
  updateSlidePosition();
});

track.addEventListener('transitionend', () => {
  if (slides[currentIndex].classList.contains('clone')) {
    track.style.transition = 'none';
    currentIndex = currentIndex === 0 ? slides.length - 2 : 1;
    updateSlidePosition();
    setTimeout(() => track.style.transition = 'transform 0.5s ease');
  }
});

标签: jsdiv
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

vue实现添加div

vue实现添加div

动态添加 div 的方法 模板中使用 v-for 通过数据驱动视图,在模板中使用 v-for 循环渲染多个 div: <template> <div v-for="(item,…