当前位置:首页 > JavaScript

js实现走马灯效果

2026-04-04 12:09:28JavaScript

实现走马灯效果的方法

走马灯(轮播图)效果可以通过纯JavaScript实现,以下是几种常见的实现方式:

使用CSS动画结合JavaScript

通过CSS定义动画效果,JavaScript控制切换逻辑:

<div class="carousel">
  <div class="slides">
    <div class="slide">Slide 1</div>
    <div class="slide">Slide 2</div>
    <div class="slide">Slide 3</div>
  </div>
</div>
.carousel {
  width: 100%;
  overflow: hidden;
  position: relative;
}

.slides {
  display: flex;
  transition: transform 0.5s ease;
}

.slide {
  min-width: 100%;
  height: 300px;
}
const slides = document.querySelector('.slides');
const slideItems = document.querySelectorAll('.slide');
let currentIndex = 0;

function nextSlide() {
  currentIndex = (currentIndex + 1) % slideItems.length;
  slides.style.transform = `translateX(-${currentIndex * 100}%)`;
}

// 自动轮播
setInterval(nextSlide, 3000);

纯JavaScript实现

不依赖CSS动画,完全通过JavaScript控制:

const carousel = document.querySelector('.carousel');
const slides = carousel.querySelector('.slides');
const slideItems = slides.querySelectorAll('.slide');
let currentIndex = 0;
const slideWidth = slideItems[0].offsetWidth;

function moveToSlide(index) {
  slides.style.left = `-${index * slideWidth}px`;
  currentIndex = index;
}

function nextSlide() {
  const nextIndex = (currentIndex + 1) % slideItems.length;
  moveToSlide(nextIndex);
}

// 初始化
slides.style.width = `${slideItems.length * slideWidth}px`;
slides.style.position = 'relative';
moveToSlide(0);

// 自动轮播
setInterval(nextSlide, 3000);

添加导航按钮

为走马灯添加前进和后退控制:

const prevBtn = document.createElement('button');
prevBtn.textContent = 'Prev';
prevBtn.addEventListener('click', () => {
  const prevIndex = (currentIndex - 1 + slideItems.length) % slideItems.length;
  moveToSlide(prevIndex);
});

const nextBtn = document.createElement('button');
nextBtn.textContent = 'Next';
nextBtn.addEventListener('click', nextSlide);

carousel.appendChild(prevBtn);
carousel.appendChild(nextBtn);

添加指示器

显示当前幻灯片位置的小圆点:

const indicators = document.createElement('div');
indicators.className = 'indicators';

slideItems.forEach((_, index) => {
  const dot = document.createElement('span');
  dot.addEventListener('click', () => moveToSlide(index));
  indicators.appendChild(dot);
});

function updateIndicators() {
  const dots = indicators.querySelectorAll('span');
  dots.forEach((dot, index) => {
    dot.classList.toggle('active', index === currentIndex);
  });
}

carousel.appendChild(indicators);

无限循环效果

实现无缝无限循环效果:

js实现走马灯效果

function cloneSlides() {
  const firstClone = slideItems[0].cloneNode(true);
  const lastClone = slideItems[slideItems.length - 1].cloneNode(true);

  slides.appendChild(firstClone);
  slides.insertBefore(lastClone, slideItems[0]);
}

cloneSlides();

function moveToSlide(index) {
  if (index === -1) {
    slides.style.transition = 'none';
    slides.style.left = `-${slideItems.length * slideWidth}px`;
    setTimeout(() => {
      slides.style.transition = 'left 0.5s ease';
      slides.style.left = `-${(slideItems.length - 1) * slideWidth}px`;
    }, 10);
    currentIndex = slideItems.length - 1;
    return;
  }

  if (index === slideItems.length) {
    slides.style.transition = 'none';
    slides.style.left = '0';
    setTimeout(() => {
      slides.style.transition = 'left 0.5s ease';
      slides.style.left = `-${slideWidth}px`;
    }, 10);
    currentIndex = 0;
    return;
  }

  slides.style.left = `-${index * slideWidth}px`;
  currentIndex = index;
}

以上方法提供了实现走马灯效果的不同方案,可以根据项目需求选择合适的实现方式。

标签: 走马灯效果
分享给朋友:

相关文章

css3制作立体效果

css3制作立体效果

使用 transform 属性实现立体旋转 通过 transform-style: preserve-3d 和 rotateX/Y/Z 实现 3D 空间变换: .container { tr…

jquery 效果

jquery 效果

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。jQuery 提供了丰富的效果(Effects)功能,可以轻松实现元素的动态显…

vue实现过渡效果

vue实现过渡效果

Vue 过渡效果实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于在元素或组件进入/离开 DOM 时应用过渡效果。以…

vue实现旋转效果

vue实现旋转效果

使用CSS动画实现旋转 在Vue中可以通过CSS的@keyframes或transform属性实现旋转效果。在组件的<style>部分定义旋转动画: .rotate { animat…

vue实现抽屉效果

vue实现抽屉效果

Vue 实现抽屉效果的方法 使用 Vue 过渡动画和 CSS 在 Vue 中可以通过 v-if 或 v-show 控制抽屉的显示隐藏,结合 <transition> 组件实现平滑动画效果。…

vue 实现过渡效果

vue 实现过渡效果

Vue 过渡效果实现方法 Vue 提供了 <transition> 和 <transition-group> 组件,用于在元素插入、更新或移除时应用动画效果。以下是具体实现方式…