当前位置:首页 > 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
分享给朋友:

相关文章

vue实现通讯录代码

vue实现通讯录代码

实现思路 Vue实现通讯录的核心在于数据管理和组件交互。通常需要包含联系人列表、搜索功能、分组索引以及添加/编辑功能。 基本结构 创建Vue组件时需包含以下部分: 数据模型:存储联系人…

h5实现响应式代码

h5实现响应式代码

响应式设计基础 HTML5实现响应式设计主要通过媒体查询(Media Queries)、弹性布局(Flexbox)、网格布局(Grid)和视口设置(Viewport Meta Tag)等技术。核心目标…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

php实现文件下载代码

php实现文件下载代码

实现文件下载的基本方法 使用PHP实现文件下载的核心是通过设置HTTP头部信息,强制浏览器触发下载行为而非直接显示文件内容。 $file_path = 'path/to/your/file.ext'…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…