当前位置:首页 > JavaScript

js实现3秒一切换

2026-04-05 03:06:10JavaScript

使用setInterval实现定时切换

通过setInterval函数可以创建一个定时器,每隔3秒执行一次切换逻辑。以下是基础实现代码:

let currentIndex = 0;
const elements = document.querySelectorAll('.item'); // 获取需要切换的元素集合

const interval = setInterval(() => {
  // 隐藏当前元素
  elements[currentIndex].style.display = 'none';

  // 计算下一个索引(循环)
  currentIndex = (currentIndex + 1) % elements.length;

  // 显示下一个元素
  elements[currentIndex].style.display = 'block';
}, 3000); // 3000毫秒=3秒

使用setTimeout实现递归切换

递归调用setTimeout可以避免setInterval可能带来的执行堆叠问题:

let currentIndex = 0;
const elements = document.querySelectorAll('.item');

function switchElement() {
  elements[currentIndex].style.display = 'none';
  currentIndex = (currentIndex + 1) % elements.length;
  elements[currentIndex].style.display = 'block';

  setTimeout(switchElement, 3000); // 递归调用
}

switchElement(); // 启动切换

添加过渡动画效果

结合CSS transition实现平滑的淡入淡出效果:

// CSS部分需要预先定义
// .item { transition: opacity 0.5s; }
// .item.hidden { opacity: 0; }

const items = document.querySelectorAll('.item');
let index = 0;

function animateSwitch() {
  items[index].classList.add('hidden');
  index = (index + 1) % items.length;
  items[index].classList.remove('hidden');

  setTimeout(animateSwitch, 3000);
}

// 初始化隐藏所有非第一个元素
items.forEach((item, i) => {
  if(i !== 0) item.classList.add('hidden');
});

animateSwitch();

支持暂停和继续功能

通过清除和重新创建定时器实现控制:

let timer;
let current = 0;
const slides = document.querySelectorAll('.slide');

function startCarousel() {
  timer = setInterval(() => {
    slides[current].classList.remove('active');
    current = (current + 1) % slides.length;
    slides[current].classList.add('active');
  }, 3000);
}

function pauseCarousel() {
  clearInterval(timer);
}

// 绑定事件示例
document.getElementById('pauseBtn').addEventListener('click', pauseCarousel);
document.getElementById('resumeBtn').addEventListener('click', startCarousel);

startCarousel(); // 初始启动

使用requestAnimationFrame实现

对于需要高性能动画的场景,可以使用requestAnimationFrame

js实现3秒一切换

let lastTime = 0;
let currentSlide = 0;
const duration = 3000;
const slides = document.querySelectorAll('.slide');

function animate(timestamp) {
  if (!lastTime) lastTime = timestamp;
  const elapsed = timestamp - lastTime;

  if (elapsed > duration) {
    slides[currentSlide].classList.remove('active');
    currentSlide = (currentSlide + 1) % slides.length;
    slides[currentSlide].classList.add('active');
    lastTime = timestamp;
  }

  requestAnimationFrame(animate);
}

requestAnimationFrame(animate);

标签: js
分享给朋友:

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…