当前位置:首页 > 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部分如下:

js实现图片轮播

.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');
}

响应式轮播实现

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

js实现图片轮播

.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);
  }
}

无限循环轮播优化

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

// 克隆首尾图片
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
分享给朋友:

相关文章

vue2实现图片懒加载

vue2实现图片懒加载

Vue2 图片懒加载实现方法 使用 Intersection Observer API Intersection Observer API 是浏览器原生支持的懒加载方案,性能较好且无需额外库。 //…

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.defin…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind(或简写为 :)动态绑定图片…

vue实现图片预览

vue实现图片预览

Vue 实现图片预览的方法 使用 Element UI 的 el-image 组件 Element UI 提供了 el-image 组件,支持图片预览功能。通过设置 preview-src-list…

vue实现图片循环

vue实现图片循环

实现图片循环的基本方法 在Vue中实现图片循环通常使用v-for指令结合数组数据。以下是基础实现方式: <template> <div> <img v-f…

vue实现图片单选

vue实现图片单选

实现图片单选功能 在Vue中实现图片单选功能可以通过v-model绑定选中状态,结合CSS样式控制选中效果。以下是具体实现方式: 基础实现方案 <template> <div…