当前位置:首页 > 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);
  }
}

无限循环轮播优化

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

// 克隆首尾图片
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实现图片轮播

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

相关文章

vue实现图片单选

vue实现图片单选

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

vue.js实现轮播

vue.js实现轮播

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

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…