当前位置:首页 > JavaScript

原生js实现轮播图

2026-01-12 13:39:01JavaScript

基本结构搭建

HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下:

<div class="slider-container">
  <div class="slider-wrapper">
    <img src="image1.jpg" class="slide active">
    <img src="image2.jpg" class="slide">
    <img src="image3.jpg" class="slide">
  </div>
  <button class="prev-btn">&lt;</button>
  <button class="next-btn">&gt;</button>
  <div class="dots-container"></div>
</div>

CSS样式设置

确保轮播图容器设置为相对定位,图片设置为绝对定位并通过透明度切换显示:

.slider-container {
  position: relative;
  width: 800px;
  height: 400px;
  overflow: hidden;
}
.slide {
  position: absolute;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: opacity 0.5s;
}
.slide.active {
  opacity: 1;
}

核心JavaScript逻辑

初始化变量并获取DOM元素:

原生js实现轮播图

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

实现图片切换函数:

function showSlide(index) {
  slides.forEach(slide => slide.classList.remove('active'));
  slides[index].classList.add('active');
}

添加按钮事件监听:

原生js实现轮播图

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

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

自动轮播功能

通过定时器实现自动播放:

let interval = setInterval(() => {
  currentIndex = (currentIndex + 1) % slides.length;
  showSlide(currentIndex);
}, 3000);

// 鼠标悬停时暂停
document.querySelector('.slider-container').addEventListener('mouseenter', () => {
  clearInterval(interval);
});

// 鼠标离开时恢复
document.querySelector('.slider-container').addEventListener('mouseleave', () => {
  interval = setInterval(() => {
    currentIndex = (currentIndex + 1) % slides.length;
    showSlide(currentIndex);
  }, 3000);
});

指示器实现

动态生成指示点并添加交互:

const dotsContainer = document.querySelector('.dots-container');
slides.forEach((_, idx) => {
  const dot = document.createElement('span');
  dot.classList.add('dot');
  if (idx === 0) dot.classList.add('active');
  dot.addEventListener('click', () => {
    currentIndex = idx;
    showSlide(currentIndex);
    updateDots();
  });
  dotsContainer.appendChild(dot);
});

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

触摸事件支持

添加移动端触摸支持:

let touchStartX = 0;
let touchEndX = 0;

document.querySelector('.slider-wrapper').addEventListener('touchstart', (e) => {
  touchStartX = e.changedTouches[0].screenX;
});

document.querySelector('.slider-wrapper').addEventListener('touchend', (e) => {
  touchEndX = e.changedTouches[0].screenX;
  handleSwipe();
});

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

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

相关文章

js实现预览

js实现预览

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js手势实现

js手势实现

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

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…