单击多个setInterval时jQuery ClearInterval不起作用[重复]

Posted

技术标签:

【中文标题】单击多个setInterval时jQuery ClearInterval不起作用[重复]【英文标题】:jQuery ClearInterval not working when multiple setInterval clicked [duplicate] 【发布时间】:2021-12-20 13:10:09 【问题描述】:

这是一个简单的 jQuery 滑块,我将通过单击 Play 按钮来启动它,通过设置 interval = setInterval(updateDiv,1000); 间隔以每 1 秒更改一次幻灯片,我正在通过 @ 清除间隔(暂停滑块) 987654323@ 到 Pause 按钮。

但是我面临的问题是,如果用户在播放按钮上多次单击,则滑块动画在更改幻灯片时会变得疯狂,之后clearInterval(interval); 功能也不起作用。为什么?

我能知道解决办法吗?

我的完整代码是:

var interval;
var interval = false;
$("#slideshow > div:gt(0)").hide();

function updateDiv() 
  $('#slideshow > div:first')
    .fadeOut(600)
    .next()
    .fadeIn(400)
    .end()
    .appendTo('#slideshow');

$(".play").click(function() 
  interval = setInterval(updateDiv, 1000);
);
$(".pause").click(function() 
  clearInterval(interval);
);
#slideshow 
  margin: 80px auto;
  position: relative;
  width: 240px;
  height: 240px;
  padding: 10px;
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.4);


#slideshow>div 
  position: absolute;
  top: 10px;
  left: 10px;
  right: 10px;
  bottom: 10px;


#slideshow2 
  margin: 80px auto;
  position: relative;
  width: 240px;
  height: 240px;
  padding: 10px;
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.4);
  margin-left: 200px;


#slideshow2>div 
  position: absolute;
  top: 10px;
  left: 10px;
  right: 10px;
  bottom: 10px;
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js'></script>
------
<button class="play">play</button>
<button class="pause">pause</button> -------

<div id="slideshow">
  <div>
    <img src="http://farm6.static.flickr.com/5224/5658667829_2bb7d42a9c_m.jpg">
  </div>
  <div>
    <img src="http://farm6.static.flickr.com/5230/5638093881_a791e4f819_m.jpg">
  </div>
  <div>
    Pretty cool eh? This slide is proof the content can be anything.
  </div>
</div>

【问题讨论】:

你试过在setInterval之前简单地调用clearInterval(interval);吗? 【参考方案1】:

每次用户点击“.play”时,都会创建另一个 setInterval,而interval 变量只包含最后一个。因此,如果已经有一个间隔,您需要清除它或阻止用户重新开始。

这是一个可行的解决方案:

var interval;
var interval = false;
$("#slideshow > div:gt(0)").hide();

function updateDiv() 
  $('#slideshow > div:first')
    .fadeOut(600)
    .next()
    .fadeIn(400)
    .end()
    .appendTo('#slideshow');

$(".play").click(function() 
  if(!interval)
    interval = setInterval(updateDiv, 1000);
  
 
);
$(".pause").click(function() 
  clearInterval(interval);
  interval = false;
);
#slideshow 
  margin: 80px auto;
  position: relative;
  width: 240px;
  height: 240px;
  padding: 10px;
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.4);


#slideshow>div 
  position: absolute;
  top: 10px;
  left: 10px;
  right: 10px;
  bottom: 10px;


#slideshow2 
  margin: 80px auto;
  position: relative;
  width: 240px;
  height: 240px;
  padding: 10px;
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.4);
  margin-left: 200px;


#slideshow2>div 
  position: absolute;
  top: 10px;
  left: 10px;
  right: 10px;
  bottom: 10px;
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js'></script>
------
<button class="play">play</button>
<button class="pause">pause</button> -------

<div id="slideshow">
  <div>
    <img src="http://farm6.static.flickr.com/5224/5658667829_2bb7d42a9c_m.jpg">
  </div>
  <div>
    <img src="http://farm6.static.flickr.com/5230/5638093881_a791e4f819_m.jpg">
  </div>
  <div>
    Pretty cool eh? This slide is proof the content can be anything.
  </div>
</div>

【讨论】:

@Davide Carlier 先生请检查这个请***.com/questions/70042321/…

以上是关于单击多个setInterval时jQuery ClearInterval不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

多个 setIntervals 同时运行的问题

使用 jquery 中的每个循环的 Next 和 Prev 按钮功能

jquery html JS setInterval暂停和重启

javascript 单击时清除setInterval

当我在菜单外单击时如何隐藏多个 jQuery toggle()?

如何在单击多个项目时使用 jQuery 循环遍历数组?