How to clearInterval with unknown ID?

前端 未结 4 1776
眼角桃花
眼角桃花 2020-11-29 04:30

Say someone (evil) has set us a timer with setInterval, but we don\'t know its ID (we don\'t have the reference to the object, that setInterval is returning, no

4条回答
  •  再見小時候
    2020-11-29 05:08

    I tried the approach suggested by #Shadow Wizard and it worked in clearing the interval. However, this approach had side effects afterwards. In my particular case, I was unable use jquery.fadeTo() after clearing all of the intervals.

    The approach that I settled on is a cleaner solution, which is to redefine the setInterval method and save the interval ids in the re-defined methods. As shown here, I put the the ids into an array and then clear all of them. With a little more refinement of the structure to store the arrays, you could label them and clear them selectively.

    var intervalTracking = new Array();
    var intervalCount=0;
    
    window.oldSetInterval = window.setInterval;
    window.setInterval = ( function(func, interval) {
        var interval = oldSetInterval(func, interval);
        intervalTracking[++intervalCount]=interval;
        return interval;
    });
    
    function clearAllIntervals() {
        for (var i = 0 ; i <= intervalCount ; i++) {
        window.clearInterval( intervalTracking[i] );
        }
    }
    

    This seems to work!

提交回复
热议问题