You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现单张幻灯片的三位置无限循环Slider?

单张幻灯片三位置循环切换Slider实现方案(Vanilla JS)

核心思路

通过三个容器承载同一张幻灯片,利用CSS定义左、中、右三个位置的视觉差异(缩放、透明度、位移),再通过JavaScript维护状态数组的循环移位,实现点击箭头时三个位置的幻灯片循环切换效果。


1. HTML结构

<div class="slider-container">
  <button class="slider-arrow slider-arrow--left" id="leftArrow">←</button>
  <div class="slider-slides">
    <!-- 仅需编写一个基础幻灯片容器,剩余两个通过JS克隆生成 -->
    <div class="slide slide--active">
      <img src="你的图片URL" alt="循环幻灯片">
    </div>
  </div>
  <button class="slider-arrow slider-arrow--right" id="rightArrow">→</button>
</div>

2. CSS样式

定义三个位置的视觉状态,添加过渡动画保证切换平滑:

.slider-container {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  max-width: 900px;
  margin: 2rem auto;
}

.slider-slides {
  display: flex;
  align-items: center;
  gap: 30px;
}

.slide {
  transition: all 0.35s ease-in-out;
  opacity: 0.6;
  transform: scale(0.8);
}

/* 中间激活态:最大最清晰 */
.slide--active {
  opacity: 1;
  transform: scale(1);
}

/* 左侧位置:左移+缩放 */
.slide--left {
  opacity: 0.6;
  transform: scale(0.8) translateX(-15%);
}

/* 右侧位置:右移+缩放 */
.slide--right {
  opacity: 0.6;
  transform: scale(0.8) translateX(15%);
}

.slider-arrow {
  background: transparent;
  border: none;
  font-size: 2.5rem;
  cursor: pointer;
  padding: 0 15px;
  color: #333;
  transition: color 0.2s;
}

.slider-arrow:hover {
  color: #666;
}

3. JavaScript逻辑

克隆幻灯片并实现循环切换:

// 初始化元素
const slideContainer = document.querySelector('.slider-slides');
const firstSlide = document.querySelector('.slide');
const leftArrow = document.getElementById('leftArrow');
const rightArrow = document.getElementById('rightArrow');

// 克隆2次,生成三个幻灯片容器
for (let i = 0; i < 2; i++) {
  const clonedSlide = firstSlide.cloneNode(true);
  slideContainer.appendChild(clonedSlide);
}

const slides = document.querySelectorAll('.slide');
// 初始状态顺序:左、中、右
let stateOrder = ['left', 'active', 'right'];

// 更新幻灯片状态
function updateSlideStates() {
  slides.forEach((slide, index) => {
    // 清除所有状态类
    slide.classList.remove('slide--left', 'slide--active', 'slide--right');
    // 添加当前状态类
    slide.classList.add(`slide--${stateOrder[index]}`);
  });
}

// 右箭头点击:循环左移状态(左→中,中→右,右→左)
rightArrow.addEventListener('click', () => {
  const firstState = stateOrder.shift();
  stateOrder.push(firstState);
  updateSlideStates();
});

// 左箭头点击:循环右移状态(右→中,中→左,左→右)
leftArrow.addEventListener('click', () => {
  const lastState = stateOrder.pop();
  stateOrder.unshift(lastState);
  updateSlideStates();
});

// 初始化状态
updateSlideStates();

效果说明

  • 三个幻灯片容器始终显示同一张图,点击左右箭头时,每个容器会平滑切换到下一个位置的视觉状态,形成循环效果
  • 所有逻辑基于原生JS实现,无需依赖任何第三方库
  • 可通过调整CSS中的scale、translateX、opacity参数自定义视觉差异程度

内容的提问来源于stack exchange,提问作者Illya Sydorenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:07:03