当前位置:首页 > JavaScript

js实现图片轮播

2026-01-12 13:07:59JavaScript

实现基础图片轮播

使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。

<div class="slider">
  <img src="image1.jpg" class="slide active">
  <img src="image2.jpg" class="slide">
  <img src="image3.jpg" class="slide">
</div>
<button class="prev">Previous</button>
<button class="next">Next</button>
.slider {
  position: relative;
  width: 500px;
  height: 300px;
  overflow: hidden;
}
.slide {
  position: absolute;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: opacity 1s ease-in-out;
}
.slide.active {
  opacity: 1;
}
const slides = document.querySelectorAll('.slide');
const prevBtn = document.querySelector('.prev');
const nextBtn = document.querySelector('.next');
let currentSlide = 0;

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

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

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

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

使用CSS动画实现平滑过渡

通过CSS的transform属性实现更平滑的滑动效果,修改CSS部分如下:

.slider {
  position: relative;
  width: 500px;
  height: 300px;
  overflow: hidden;
}
.slide {
  position: absolute;
  width: 100%;
  height: 100%;
  transition: transform 0.5s ease-in-out;
}
.slide.active {
  transform: translateX(0);
}
.slide.next {
  transform: translateX(100%);
}
.slide.prev {
  transform: translateX(-100%);
}

JavaScript部分需要更新showSlide函数:

function showSlide(index) {
  slides.forEach(slide => {
    slide.classList.remove('active', 'prev', 'next');
  });

  slides[index].classList.add('active');

  const nextIndex = (index + 1) % slides.length;
  slides[nextIndex].classList.add('next');

  const prevIndex = (index - 1 + slides.length) % slides.length;
  slides[prevIndex].classList.add('prev');
}

响应式轮播实现

确保轮播在不同屏幕尺寸下都能正常显示,添加响应式设计:

.slider {
  position: relative;
  width: 100%;
  max-width: 800px;
  height: auto;
  aspect-ratio: 16/9;
  overflow: hidden;
  margin: 0 auto;
}

@media (max-width: 768px) {
  .slider {
    max-width: 100%;
  }
}

JavaScript部分可以添加触摸事件支持:

let touchStartX = 0;
let touchEndX = 0;

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

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

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

无限循环轮播优化

实现无缝无限循环效果,需要克隆首尾图片:

js实现图片轮播

// 克隆首尾图片
const firstClone = slides[0].cloneNode(true);
const lastClone = slides[slides.length - 1].cloneNode(true);
firstClone.classList.add('clone');
lastClone.classList.add('clone');
slider.insertBefore(lastClone, slides[0]);
slider.appendChild(firstClone);

// 更新索引计算
function showSlide(index) {
  if (index === -1) {
    index = slides.length - 1;
    slider.style.transition = 'none';
    slider.style.transform = `translateX(-${(slides.length) * 100}%)`;
    setTimeout(() => {
      slider.style.transition = 'transform 0.5s ease-in-out';
      index = slides.length - 1;
      slider.style.transform = `translateX(-${(index) * 100}%)`;
    }, 50);
  }
  // 类似处理超出范围的情况
}

标签: 图片js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

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

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…