jquery - clearInterval(timerId) 不起作用

标签 jquery setinterval

我想在发生 mouseenter 事件时开始计数,然后在发生 mouseleave 事件时停止计数。但是,正如您在本示例的控制台中看到的,mouseleave 内的 clearInterval(timerId) 命令不起作用。

有什么问题吗?

var timerId;
clearInterval(timerId);

$("#demo").mouseenter(function() {
  setTimeout(function() {
    startcounting(timerId);
  }, 2000)
});

$("#demo").mouseleave(function() {
  clearInterval(timerId);
});

function startcounting(timerId) {
  var number = 0;
  timerId = setInterval(function() {
    increment(timerId);
  }, 100);

  function increment(timerId) {
    if (number >= 100) {
      number = 0;
      clearInterval(timerId);
    } else {
      number++;
      console.log(number);
    }
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="demo">demo</div>

最佳答案

问题是因为您的 startcounting()increment() 函数有一个名为 timerId 的参数,该参数隐藏了外部作用域中的同名变量 - 这是您需要的变量。

如果删除这些属性,代码将有效:

var timerId;
clearInterval(timerId);

$("#demo").mouseenter(function() {
    setTimeout(function() {
        startcounting(); // remove here
    }, 2000)
});

$("#demo").mouseleave(function() {
    clearInterval(timerId);
});

function startcounting() { // remove here
    var number = 0;
    timerId = setInterval(function() {
        increment(timerId);
    }, 100);

    function increment() { // remove here
        if (number >= 100) {
            number = 0;
            clearInterval(timerId);
        } else {
            number++;
            console.log(number);
        }
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="demo">demo</div>

关于jquery - clearInterval(timerId) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017527/

相关文章:

JQuery:将div返回到初始高度

jquery - 线性宽松放缓

php - 如何实现 slider 并替换覆盖对象的静态图像

javascript - JQM : popup not closing on timeout?

javascript - 确保特定的 setInterval 函数实例只运行一次

javascript - setInterval 在 Google Chrome 扩展程序中不起作用(仅触发一次)

javascript - 当我的秒表用 setInterval 更新时,它会闪烁,如何使其平滑?

javascript - 来自 CSS ID 的百分比变量

javascript - 如何使用 javascript 使用来自 php 函数的数组元素填充 <div> 元素?

JavaScript/Jquery clearInterval 和 setInterval 多个 slider