…">
当前位置:首页 > JavaScript

简单js实现轮播

2026-01-30 17:31:56JavaScript

实现基础轮播图

使用HTML和CSS创建基本结构,JavaScript实现轮播逻辑:

<div class="slider">
  <div class="slides">
    <img src="image1.jpg" class="slide active">
    <img src="image2.jpg" class="slide">
    <img src="image3.jpg" class="slide">
  </div>
  <button class="prev">❮</button>
  <button class="next">❯</button>
</div>
.slider {
  position: relative;
  width: 500px;
  height: 300px;
  overflow: hidden;
}
.slides {
  display: flex;
  transition: transform 0.5s ease;
}
.slide {
  min-width: 100%;
}
.active {
  display: block;
}
button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
.prev { left: 10px; }
.next { right: 10px; }

JavaScript轮播逻辑

const slides = document.querySelectorAll('.slide');
const prevBtn = document.querySelector('.prev');
const nextBtn = document.querySelector('.next');
const slidesContainer = document.querySelector('.slides');
let currentIndex = 0;

function updateSlide() {
  slidesContainer.style.transform = `translateX(-${currentIndex * 100}%)`;
  slides.forEach(slide => slide.classList.remove('active'));
  slides[currentIndex].classList.add('active');
}

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

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

// 自动轮播
setInterval(() => {
  currentIndex = (currentIndex + 1) % slides.length;
  updateSlide();
}, 3000);

添加指示器

在HTML中添加指示器元素:

简单js实现轮播

<div class="indicators"></div>

JavaScript部分添加指示器逻辑:

简单js实现轮播

const indicatorsContainer = document.querySelector('.indicators');

function createIndicators() {
  slides.forEach((_, index) => {
    const indicator = document.createElement('div');
    indicator.classList.add('indicator');
    if(index === 0) indicator.classList.add('active');
    indicator.addEventListener('click', () => {
      currentIndex = index;
      updateSlide();
    });
    indicatorsContainer.appendChild(indicator);
  });
}

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

// 在updateSlide函数中调用
function updateSlide() {
  slidesContainer.style.transform = `translateX(-${currentIndex * 100}%)`;
  slides.forEach(slide => slide.classList.remove('active'));
  slides[currentIndex].classList.add('active');
  updateIndicators();
}

createIndicators();

触摸支持

添加触摸事件支持移动设备:

let touchStartX = 0;
let touchEndX = 0;

slidesContainer.addEventListener('touchstart', e => {
  touchStartX = e.changedTouches[0].screenX;
});

slidesContainer.addEventListener('touchend', e => {
  touchEndX = e.changedTouches[0].screenX;
  handleSwipe();
});

function handleSwipe() {
  if(touchEndX < touchStartX - 50) {
    currentIndex = (currentIndex + 1) % slides.length;
  }
  if(touchEndX > touchStartX + 50) {
    currentIndex = (currentIndex - 1 + slides.length) % slides.length;
  }
  updateSlide();
}

性能优化

添加过渡结束事件处理:

let isTransitioning = false;

slidesContainer.addEventListener('transitionstart', () => {
  isTransitioning = true;
});

slidesContainer.addEventListener('transitionend', () => {
  isTransitioning = false;
});

function updateSlide() {
  if(isTransitioning) return;
  slidesContainer.style.transform = `translateX(-${currentIndex * 100}%)`;
  // 其余逻辑...
}

标签: 简单js
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现点击显示和隐藏

js实现点击显示和隐藏

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

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…