当前位置:首页 > 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实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…