当前位置:首页 > JavaScript

js实现轮播图

2026-01-12 12:57:07JavaScript

基础轮播图实现

使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。

<div class="slider">
  <div class="slides">
    <img src="image1.jpg" class="slide">
    <img src="image2.jpg" class="slide">
    <img src="image3.jpg" class="slide">
  </div>
</div>

CSS样式设置滑动效果和布局

.slider {
  width: 500px;
  height: 300px;
  overflow: hidden;
  position: relative;
}

.slides {
  display: flex;
  transition: transform 0.5s ease;
}

.slide {
  min-width: 100%;
}

JavaScript核心逻辑

let currentIndex = 0;
const slides = document.querySelector('.slides');
const slideItems = document.querySelectorAll('.slide');
const totalSlides = slideItems.length;

function nextSlide() {
  currentIndex = (currentIndex + 1) % totalSlides;
  updateSlidePosition();
}

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

setInterval(nextSlide, 3000);

添加导航控制

扩展基础功能,增加左右箭头和圆点指示器。HTML添加控制元素:

<div class="slider-controls">
  <button class="prev-btn">&lt;</button>
  <button class="next-btn">&gt;</button>
  <div class="dots-container"></div>
</div>

JavaScript添加交互逻辑

const prevBtn = document.querySelector('.prev-btn');
const nextBtn = document.querySelector('.next-btn');
const dotsContainer = document.querySelector('.dots-container');

function createDots() {
  for (let i = 0; i < totalSlides; i++) {
    const dot = document.createElement('span');
    dot.classList.add('dot');
    if (i === 0) dot.classList.add('active');
    dot.addEventListener('click', () => goToSlide(i));
    dotsContainer.appendChild(dot);
  }
}

function goToSlide(index) {
  currentIndex = index;
  updateSlidePosition();
  updateDots();
}

function updateDots() {
  const dots = document.querySelectorAll('.dot');
  dots.forEach((dot, index) => {
    dot.classList.toggle('active', index === currentIndex);
  });
}

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

nextBtn.addEventListener('click', nextSlide);

触摸屏支持

添加触摸事件处理实现移动端滑动交互:

let touchStartX = 0;
let touchEndX = 0;

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

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

function handleSwipe() {
  const threshold = 50;
  if (touchEndX < touchStartX - threshold) {
    nextSlide();
  } else if (touchEndX > touchStartX + threshold) {
    prevBtn.click();
  }
}

性能优化方案

改进实现方式提升运行效率:

使用requestAnimationFrame替代setInterval

let animationId;
let lastTime = 0;

function autoPlay(time) {
  if (!lastTime || time - lastTime >= 3000) {
    nextSlide();
    lastTime = time;
  }
  animationId = requestAnimationFrame(autoPlay);
}

function startAutoPlay() {
  animationId = requestAnimationFrame(autoPlay);
}

function stopAutoPlay() {
  cancelAnimationFrame(animationId);
}

// 鼠标悬停时暂停
slider.addEventListener('mouseenter', stopAutoPlay);
slider.addEventListener('mouseleave', startAutoPlay);

使用Intersection Observer实现懒加载

const lazyLoadObserver = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      lazyLoadObserver.unobserve(img);
    }
  });
});

document.querySelectorAll('.slide').forEach(img => {
  lazyLoadObserver.observe(img);
});

js实现轮播图

标签: js轮播图
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const ch…

vue实现js休眠

vue实现js休眠

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

css3制作轮播图

css3制作轮播图

使用CSS3制作轮播图 HTML结构 轮播图的基础HTML结构通常包含一个容器和多个轮播项。以下是一个简单的示例: <div class="carousel"> <div cl…