javascript - clearTimeout(var) 不清除 var 超时

标签 javascript settimeout cleartimeout

项目 --> http://codepen.io/urketadic/pen/YpLgBX
描述 --> 我想在不再选中复选框时清除此函数的超时。

  var holder2 = setTimeout(function() { 
  $("#matrix2").css('display','block'); },26570);

当你点击矩阵时,小 Frog 应该在26秒后开始跳舞,问题是,如果你取消矩阵模式并点击提交(比如说在第22秒),然后很快再次启用矩阵模式, Frog 将在4 秒不是 26,因为超时仍在运行。

问题 ->这不起作用:

clearTimeout(holder2);

还尝试过:

holder2.clearTimeout();

完整代码

$("#Confirm").on('click', function () {
    if (document.getElementById('matrixcheckbox').checked) {
        matrixreset();
        $("#unmute").show();
        $("#matrix2").css('visibility', 'visible');
        player.playVideo();

        var holder = setTimeout(function () {
            $("#matrix1").css('display', 'block');
        }, 1900);
        var holder2 = setTimeout(function () {
            $("#matrix2").css('display', 'block');
        }, 26570);

        $("#pi").css('background-image', 'url(' + 'http://i1007.photobucket.com/albums/af198/GoDHanD/My%20FS%20Profile/RedMatrix.gif' + ')');
    } else {
        matrixreset();
        clearTimeout(holder);
        clearTimeout(holder2);
    }
});

最佳答案

这是一个范围问题。每次执行此回调函数时,它都会:

  1. 立即为 holderholder2 创建新的 undefined variable ( because var declarations are hoisted to the top of the function )。
  2. 输入条件

    a. 或者为这些新变量赋值

    b. 对 undefined variable 运行clearTimeout

变量在任何时候都不会被定义和清除。

解决方案是在回调之外声明 timeoutID 变量,以便它在调用之间保持不变(第一行):

var holder, holder2;

$("#Confirm").on('click', function () {
    if (document.getElementById('matrixcheckbox').checked) {
        matrixreset();
        $("#unmute").show();
        $("#matrix2").css('visibility', 'visible');
        player.playVideo();

        holder = setTimeout(function () {
            $("#matrix1").css('display', 'block');
        }, 1900);
        holder2 = setTimeout(function () {
            $("#matrix2").css('display', 'block');
        }, 26570);

        $("#pi").css('background-image', 'url(' + 'http://i1007.photobucket.com/albums/af198/GoDHanD/My%20FS%20Profile/RedMatrix.gif' + ')');
    } else {
        matrixreset();
        clearTimeout(holder);
        clearTimeout(holder2);
    }
});

关于javascript - clearTimeout(var) 不清除 var 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41487855/

相关文章:

javascript - clearTimeout 不起作用 - setinterval 问题

javascript - 清除 'looped' 超时在函数中关闭 - 如何返回我能够清除它的间隔 ID

javascript - 将唯一 id 添加到深层嵌套对象数组的最有效方法

javascript - jQuery UI 对话框 - X 秒后关闭

javascript - 如何在 JavaScript 中进行 sleep 或完全暂停

javascript - 从定时循环内部中断 JavaScript 执行

javascript - 第一个 jquery 事件正在发生,但不是第二个

javascript - 用 Canvas 元素替换带有背景图像的div

javascript - AngularJS - ng-checked 不会触发 ng-change

javascript - for循环中的setTimeout()的clearTimeout()