settimeout之后删除removeChild - 零星地工作?

时间:2013-07-20 23:41:56

标签: javascript settimeout removechild

晚上好。

我有一个覆盖网站的加载程序,通过css转换(不透明度)淡出,当body类更改为“loaded”时持续1000ms,然后一旦转换完成,我将其从DOM中删除

我正在使用以下脚本,它可以很好地适用于所有条形码osx snow leopard / google chrome v28,甚至只适用于几个人 - 我有完全相同的设置,我的客户端和几乎所有人我可以测试 - 它工作正常。

但我有2或3个错误报告,其中加载器未从DOM中删除,因此它仍覆盖其余内容并使其下的元素无法点击。一个用户甚至给我发了一个视频,确认了loader元素仍然在DOM中。

脚本如下;我想知道我是如何删除元素或使用setTimeout函数语法本身存在问题。

任何帮助,为什么这可能会失败将不胜感激,特别是考虑到我无法复制这个!我在脚本中添加了注释来解释我希望它如何工作(以及它大部分是如何工作的)。

var 
loaded = false,
_body = document.body,
loader = document.getElementById("loader"),
kill_loader = function() {
    if ( loader ) {
        loader.parentNode.removeChild(loader);
    }
},
cl = function() {
    // set loaded to true, add class to body that fades the loader, then remove the loader
    loaded = true;
    _body.className = _body.className + " loaded";
    // the above works as intended
    setTimeout(kill_loader,1000);
    // this last bit does not seem to work in rare instances as detailed. 
    // the timeout is so that the loader fully fades before being removed. 
};

window.onload = function() {
    if ( !loaded ) {
    // if loaded variable is false (i.e. cl() has not run), call the function to complete loading
        cl();
    }
};


setTimeout(function () {
    // if page still not loaded after 5 seconds, force the load
    if( !loaded ) {
        cl();
    }
},5000);

提前感谢大家提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

好的解决方案与我的脚本本身无关,但是由于安装了一个Chrome插件(measureIt.js)而导致我的脚本被删除。辉煌。

我已经设法在安装插件的情况下复制问题(不仅限于OSX或chrome版本),并添加了一个简单的try catch语句来删除加载程序。

感谢Crazy Train帮助我整理语法 - 它使问题更容易隔离。