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

如何实现点击Play后.up类循环遍历div,点击Stop后停止并清除残留类

实现方案

原代码问题说明

  • 一次性注册的所有setTimeout仅会执行一轮,无法实现持续循环切换效果
  • 没有保存定时器引用,点击Stop时无法取消已经排队等待执行的回调,会出现停止后样式仍自动跳转的问题
  • Stop按钮逻辑冗余无效,没有正确清除所有元素上残留的.up类

实现逻辑

  • 定义全局变量存储播放状态、当前轮播索引、定时器ID,跨函数共享状态
  • Play按钮点击后先判断播放状态,避免重复点击创建多个轮播任务;每切换完一组样式后,若处于播放状态就自动安排下一组切换,到序列末尾时重置索引到0,实现无限循环
  • Stop按钮点击后立即修改播放状态为停止,清除待执行的定时器,最后批量移除所有元素上的.up类,重置轮播索引

完整JS代码

let sequencing = [["01-01", "02-01", "03-01"],["01-02", "02-02", "03-02"],["01-03", "02-03", "03-03"],["01-04", "02-04", "03-04"]];
let isPlaying = false;
let currentIndex = 0;
let timer = null;

$("#play").on("click",function(){ 
  // 重复点击时不重复启动轮播
  if(isPlaying) return;
  isPlaying = true;
  play();
});

function play(){
  // 清除残留定时器防止冲突
  if(timer) clearTimeout(timer);
  // 清除上一组的高亮样式
  $('.up').removeClass('up');
  // 给当前组元素添加高亮样式
  sequencing[currentIndex].forEach(id => $('#' + id).addClass('up'));
  // 索引自增,到序列末尾回到0实现循环
  currentIndex = (currentIndex + 1) % sequencing.length;
  // 1秒后执行下一次切换
  timer = setTimeout(play, 1000);
}

$("#stop").on("click", function() {
  isPlaying = false;
  // 清除待执行的轮播任务
  clearTimeout(timer);
  timer = null;
  // 清除所有残留高亮样式
  $('.up').removeClass('up');
  // 重置轮播索引
  currentIndex = 0;
});

CSS样式

.up {
  background-color: #C00;
  color: #FFF;
}

HTML结构

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<button id="play">Play</button>
</div>
<div>
<button id="stop">stop</button>
</div>


<div>
<div id="01-01">01-01</div>
<div id="02-01">02-01</div>
<div id="03-01">03-01</div>

<div id="01-02">01-02</div>
<div id="02-02">02-02</div>
<div id="03-02">03-02</div>

<div id="01-03">01-03</div>
<div id="02-03">02-03</div>
<div id="03-03">03-03</div>

<div id="01-04">01-04</div>
<div id="02-04">02-04</div>
<div id="03-04">03-04</div>
</div>

内容的提问来源于stack exchange,提问作者Dela Torre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:54:36