当前位置:首页 > JavaScript

js实现轮播代码

2026-01-15 15:20:37JavaScript

基础轮播实现

使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。

<div class="carousel">
  <div class="carousel-inner">
    <img src="image1.jpg" class="carousel-item active">
    <img src="image2.jpg" class="carousel-item">
    <img src="image3.jpg" class="carousel-item">
  </div>
  <button class="carousel-control prev">❮</button>
  <button class="carousel-control next">❮</button>
</div>

CSS样式设置轮播布局和过渡效果:

.carousel {
  position: relative;
  width: 100%;
  max-width: 600px;
  margin: auto;
  overflow: hidden;
}

.carousel-inner {
  display: flex;
  transition: transform 0.5s ease;
}

.carousel-item {
  min-width: 100%;
  height: 300px;
  object-fit: cover;
}

.carousel-control {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(0,0,0,0.5);
  color: white;
  border: none;
  padding: 10px;
  cursor: pointer;
}

.prev { left: 10px; }
.next { right: 10px; }

JavaScript实现轮播逻辑:

const carousel = document.querySelector('.carousel-inner');
const items = document.querySelectorAll('.carousel-item');
const prevBtn = document.querySelector('.prev');
const nextBtn = document.querySelector('.next');
let currentIndex = 0;
const totalItems = items.length;

function updateCarousel() {
  carousel.style.transform = `translateX(-${currentIndex * 100}%)`;
}

nextBtn.addEventListener('click', () => {
  currentIndex = (currentIndex + 1) % totalItems;
  updateCarousel();
});

prevBtn.addEventListener('click', () => {
  currentIndex = (currentIndex - 1 + totalItems) % totalItems;
  updateCarousel();
});

自动轮播功能

添加自动轮播功能,每隔3秒切换一次图片:

let autoPlayInterval;

function startAutoPlay() {
  autoPlayInterval = setInterval(() => {
    currentIndex = (currentIndex + 1) % totalItems;
    updateCarousel();
  }, 3000);
}

function stopAutoPlay() {
  clearInterval(autoPlayInterval);
}

// 鼠标悬停时暂停自动轮播
carousel.parentElement.addEventListener('mouseenter', stopAutoPlay);
carousel.parentElement.addEventListener('mouseleave', startAutoPlay);

startAutoPlay();

指示器添加

在轮播底部添加指示器小点,显示当前活跃的幻灯片:

<div class="carousel-indicators">
  <span class="indicator active" data-index="0"></span>
  <span class="indicator" data-index="1"></span>
  <span class="indicator" data-index="2"></span>
</div>

CSS样式:

.carousel-indicators {
  display: flex;
  justify-content: center;
  padding: 10px;
}

.indicator {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #ccc;
  margin: 0 5px;
  cursor: pointer;
}

.indicator.active {
  background: #333;
}

JavaScript更新指示器状态:

const indicators = document.querySelectorAll('.indicator');

function updateIndicators() {
  indicators.forEach((indicator, index) => {
    indicator.classList.toggle('active', index === currentIndex);
  });
}

indicators.forEach(indicator => {
  indicator.addEventListener('click', () => {
    currentIndex = parseInt(indicator.dataset.index);
    updateCarousel();
    updateIndicators();
  });
});

// 在updateCarousel函数中添加
updateIndicators();

无限循环优化

修改轮播逻辑实现无缝无限循环:

js实现轮播代码

// 在HTML中克隆第一个和最后一个元素
const firstClone = items[0].cloneNode(true);
const lastClone = items[totalItems - 1].cloneNode(true);
carousel.appendChild(firstClone);
carousel.insertBefore(lastClone, items[0]);

// 更新变量和函数
items = document.querySelectorAll('.carousel-item');
totalItems = items.length;
currentIndex = 1; // 从克隆后的第一个真实项目开始

function updateCarousel() {
  carousel.style.transform = `translateX(-${currentIndex * 100}%)`;

  // 检查是否到达克隆项,重置位置
  if (currentIndex === totalItems - 1) {
    setTimeout(() => {
      carousel.style.transition = 'none';
      currentIndex = 1;
      updateCarousel();
      setTimeout(() => carousel.style.transition = 'transform 0.5s ease');
    }, 500);
  } else if (currentIndex === 0) {
    setTimeout(() => {
      carousel.style.transition = 'none';
      currentIndex = totalItems - 2;
      updateCarousel();
      setTimeout(() => carousel.style.transition = 'transform 0.5s ease');
    }, 500);
  }
}

标签: 代码js
分享给朋友:

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

jquery代码

jquery代码

以下是关于jQuery代码的常见用法和示例,涵盖基础操作、事件处理、DOM操作等核心功能: 基础语法 jQuery通过$()函数选择元素,支持CSS选择器语法: // 选择所有<p>元…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…