【问题标题】:How to set Interval , clear Interval and pass an argument (timer) [duplicate]如何设置 Interval ,清除 Interval 并传递参数(计时器)[重复]
【发布时间】:2019-03-12 21:13:07
【问题描述】:

文档指出 clearInterval() 需要在 setIntervalId 中传递,因此该函数必须如下所示:

var logMe = setInterval(function () {...}, interval)

页面加载后,上述函数也会自动调用。

如果我尝试将其放入匿名函数中,如下所示:

var logMe = function (interval) {
    setInterval(function () {
        console.log("whatever");
    }, interval);
};

我可以传递一个区间参数,但我不能通过以下方式停止它:

function stopLogMe() {
    window.clearInterval(logMe);
};

所以问题是,我可以创建一个函数“setInterval”,我可以传递一个参数(间隔)并使用 clearInterval 停止它吗?

【问题讨论】:

    标签: javascript setinterval


    【解决方案1】:

    在调用 logMe 函数时定义变量并为其分配计时器:

    var interval = 2000;
    var timer = null;
    
    function logMe() {
      timer = setInterval(function() {
        console.log('hello!');
      }, interval);
    }
    
    function stopLogMe() {
      window.clearInterval(timer);
    }
    <button onclick="logMe();">Start</button>
    <button onclick="stopLogMe();">Stop</button>

    【讨论】:

    • 或数组:var timer = []; timer.push(setInterval(function() { console.log('hello!'); }, interval))
    【解决方案2】:

    您需要以某种方式将 ID 和停止函数封装在对象或函数中。 ID 必须在记录器的本地上下文中,以便它可以在需要停止时访问它。它还允许您创建不止一个记录器,而不会使事情变得复杂。

    const Interval = function (fn, interval) {
      this.id = setInterval(fn, interval)
    
      this.clear= function () {
        clearInterval(this.id)
      }
    }
    
    // Create new logger
    const myLogger = new Interval(function () {
      console.log('Log me')
    }, 1000)
    
    // Clear interval after 5 seconds.
    setTimeout(myLogger.clear.bind(myLogger), 5000)
    

    【讨论】:

    • 谢谢,像梦一样工作:)
    猜你喜欢
    • 2019-10-21
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多