当前位置:首页 > JavaScript

js实现轮换图

2026-02-03 04:38:53JavaScript

实现轮换图的基本思路

轮换图(轮播图)通常通过定时切换图片或内容实现动态展示效果。核心逻辑包括自动轮播、手动切换(如点击按钮)以及过渡动画。

HTML结构

构建基础HTML结构,包含图片容器和导航按钮:

<div class="slider">
  <div class="slides">
    <img src="image1.jpg" class="slide active">
    <img src="image2.jpg" class="slide">
    <img src="image3.jpg" class="slide">
  </div>
  <button class="prev">←</button>
  <button class="next">→</button>
  <div class="dots">
    <span class="dot active"></span>
    <span class="dot"></span>
    <span class="dot"></span>
  </div>
</div>

CSS样式

添加基础样式实现视觉布局:

.slider {
  position: relative;
  width: 600px;
  height: 400px;
  margin: auto;
  overflow: hidden;
}

.slides {
  display: flex;
  width: 100%;
  height: 100%;
}

.slide {
  min-width: 100%;
  transition: transform 0.5s ease;
}

.slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.prev, .next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: rgba(0,0,0,0.5);
  color: white;
  border: none;
  padding: 10px;
  cursor: pointer;
}

.prev { left: 10px; }
.next { right: 10px; }

.dots {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
}

.dot {
  width: 12px;
  height: 12px;
  margin: 0 5px;
  border-radius: 50%;
  background: #bbb;
  cursor: pointer;
}

.dot.active { background: #333; }

JavaScript逻辑

实现自动轮播和手动控制功能:

document.addEventListener('DOMContentLoaded', function() {
  const slides = document.querySelectorAll('.slide');
  const dots = document.querySelectorAll('.dot');
  const prevBtn = document.querySelector('.prev');
  const nextBtn = document.querySelector('.next');
  let currentIndex = 0;
  let intervalId;

  // 切换到指定索引的幻灯片
  function goToSlide(index) {
    slides.forEach((slide, i) => {
      slide.style.transform = `translateX(${100 * (i - index)}%)`;
      slide.classList.toggle('active', i === index);
    });
    dots.forEach((dot, i) => {
      dot.classList.toggle('active', i === index);
    });
    currentIndex = index;
  }

  // 自动轮播
  function startAutoPlay() {
    intervalId = setInterval(() => {
      const nextIndex = (currentIndex + 1) % slides.length;
      goToSlide(nextIndex);
    }, 3000);
  }

  // 初始化
  goToSlide(0);
  startAutoPlay();

  // 手动控制
  prevBtn.addEventListener('click', () => {
    clearInterval(intervalId);
    const prevIndex = (currentIndex - 1 + slides.length) % slides.length;
    goToSlide(prevIndex);
    startAutoPlay();
  });

  nextBtn.addEventListener('click', () => {
    clearInterval(intervalId);
    const nextIndex = (currentIndex + 1) % slides.length;
    goToSlide(nextIndex);
    startAutoPlay();
  });

  // 点击指示点切换
  dots.forEach((dot, index) => {
    dot.addEventListener('click', () => {
      clearInterval(intervalId);
      goToSlide(index);
      startAutoPlay();
    });
  });
});

进阶优化

添加触摸事件支持移动端滑动操作:

const slider = document.querySelector('.slider');
let startX, moveX;

slider.addEventListener('touchstart', (e) => {
  startX = e.touches[0].clientX;
  clearInterval(intervalId);
});

slider.addEventListener('touchmove', (e) => {
  moveX = e.touches[0].clientX;
  const diffX = startX - moveX;
  slides.forEach(slide => {
    slide.style.transition = 'none';
    slide.style.transform = `translateX(calc(${100 * (slide.dataset.index - currentIndex)}% - ${diffX}px))`;
  });
});

slider.addEventListener('touchend', () => {
  const threshold = 50;
  const diffX = startX - moveX;

  if (diffX > threshold && currentIndex < slides.length - 1) {
    goToSlide(currentIndex + 1);
  } else if (diffX < -threshold && currentIndex > 0) {
    goToSlide(currentIndex - 1);
  } else {
    goToSlide(currentIndex);
  }

  slides.forEach(slide => {
    slide.style.transition = 'transform 0.5s ease';
  });

  startAutoPlay();
});

注意事项

  • 图片需预加载避免切换时闪烁
  • 响应式设计需通过媒体查询调整容器尺寸
  • 过渡效果可通过CSS的transition属性自定义
  • 无限循环通过模运算(%)实现索引循环

js实现轮换图

标签: js
分享给朋友:

相关文章

js实现打印

js实现打印

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

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…