setTimeout 在 Javascript 中触发两次或不触发

erol_smsr

我有这个代码:

window.setTimeout(function() {
    let sudokuBodyWidth = $sudokuBody.outerWidth(true);
    let sudokuBodyHeight = $sudokuBody.outerHeight(true);

    console.log(sudokuBodyWidth + ',' + sudokuBodyHeight);

    $sudoku.hide();
    $welcomeOverlay.css({
        width: sudokuBodyWidth,
        height: sudokuBodyHeight
    }).show();
}, 800);

window.clearTimeout();

我已将此代码放在 setTimeout 中,因为加载 DOM 需要花费大量时间,因此 JS 代码执行时间过早并为值返回 0(这是一个巨大的代码库,我不被“允许”更改站点结构以使 JS 稍后加载)。

问题是这段代码运行了两次。首先,它返回正确的结果,然后在正确值之后立即为两个变量返回 0。如您所见,我添加了 clearTimeout 以防止执行两次。但它一直执行两次。

我也试过:

let welcomeTimeout = setTimeout(function() {
    // the code
});

clearTimeout(welcomeTimeout);

执行此操作时,代码根本不执行。

特里普拉里·香卡

window.clearTimeout()什么都不做,因为你没有通过返回的 timerId 女巫window.setTimeout(),这不应该运行两次还有其他的东西女巫导致这个函数运行两次

并在第二个clearTimeout(welcomeTimeout);清除计时器,这就是您的代码不运行的原因

如果要在文档完全加载后运行代码,则可以使用 window.onload = function(){...}

或者,如果您使用的是 jQuery,那么您也可以尝试 $(document).ready(function(){...})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章