如何在时间过去后禁用某个功能?

时间:2015-07-09 13:22:23

标签: javascript jquery

我尝试在达到特定时间段时禁用2个功能,并在该时间段后启用其他2个功能。因此,必须首先禁用第二个2个函数。

我在考虑使用以下代码来包装这些函数:

代码:

var startTime = new Date().getTime();
var interval = setInterval(function(){
if(new Date().getTime() - startTime > 5000){
    clearInterval(interval);
    return;
}

function 1() {}
$(function 2() {});

}, 1000);

function 3() {}
$(function 4() {});

你能帮忙吗?

4 个答案:

答案 0 :(得分:2)

如果你想控制函数是否做某事,根据已经过了多长时间,在你需要的时间间隔之后设置一个标志可能会更容易,然后让你的函数检查那个标志来判断它们是否有效会做点什么:

var timedOut = false;

setTimeout(function () {
    timedOut = true;
}, 5000);

function one() {

    if (!timedOut) {
        // do something
    }

}

function two() {

    if (!timedOut) {
        // do something
    }

}

function three() {

    if (timedOut) {
        // do something
    }

}

function four() {

    if (timedOut) {
        // do something
    }

}

答案 1 :(得分:1)

这应该让你开始;我已经在设定的时间(5秒,如您的示例使用)之后重新定义了原始的func1 / func2函数。这可以做任何事情(例如完全删除函数定义)。

(function(document,window,undefined){
    // Used simply to show output to the window.
    var db = document.getElementById('db');
   
    // Here we define the initial state of our two functions.
    // Nothing magical here, just outputting a description.
    window.func1 = function(){
        db.innerHTML += 'Hello from original func1\r\n';
    }
    window.func2 = function(){
        db.innerHTML += 'Hello from original func2\r\n';
    }
    
    // Here we keep the same format you used (using the Date to
    // define when one's been deprecated over the other).
    var startTime = new Date().getTime(),
        interval = setInterval(function(){
            var currentTime = new Date().getTime(),
                delta = currentTime - startTime;
            if (delta > 5000){
              
                // In here, now that the specified amount of time has
                // elapsed, we redefine the meaning of the two original
                // functions. We could also simply remove them.
                window.func1 = function(){
                    db.innerHTML += 'Hello from NEW func1\r\n';
                }
                window.func2 = function(){
                    db.innerHTML += 'Hello from NEW func2\r\n';
                }
                
                clearInterval(interval);
            }
        }, 1000);
})(document,window);

// This is here just to show you how one definition is changed
// in place of another.
setInterval(function(){
    func1();
    func2();
}, 1000);
<pre id="db"></pre>

答案 2 :(得分:0)

如果您的意思是“禁用”&#39;一定时间后的功能,这应该可以解决问题。

var secondsLimit = 10,
    a = 0,
    b = setInterval(function () { a += 1; }, 1000 });

function A() {
   if (a > secondsLimit) {
      return;
   }

   // do stuff
}

答案 3 :(得分:0)

如果您调用它们,可以更改这些功能,例如通过全局变量范围。 在以下基于代码的示例中,函数在4秒后切换。

var function1 = function() {
    console.log("function 1 active");
};

var function2 = function() {
    console.log("function 2 active")
}

var startTime = new Date().getTime();

setTimeout(function() {
    function1 = function() {
        console.log("now function 3 is active instead of function 1");
    }

    function2 = function() {
        console.log("now function 4 is active instead of function 2");
    }
}, 4000);

//the following code is just for testing reasons
var interval = setInterval(function() {
    function1();
    function2();
}, 1000)