晚上好。setimeout後的removeChild - 零星工作?
我有一個加載器覆蓋站點,通過css轉換(不透明)淡出,當body類更改爲「加載」時持續1000ms,然後一旦轉換完成,我將它從DOM。
我正在使用以下腳本,在任何情況下都能正常工作bar osx snow leopard/google chrome v28,甚至只有幾個人 - 我的設置完全相同,我的客戶和幾乎所有人我可以去測試 - 並且它工作正常。
但是,我已經有2或3個錯誤報告,其中加載程序沒有從DOM中刪除,所以它仍然覆蓋其餘內容,並使其下的元素無法點擊。一類用戶甚至給我發送了一個視頻,確認加載程序元素仍在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);
非常感謝您提供給您的任何幫助。
如果你不能複製它,你可以讓你的用戶報告任何控制檯錯誤嗎?你的變量是全局的嗎? –
...這不是直接相關的,但作爲一種形式,我會將你的'if(!loaded){'移動到'cl()'函數,以便不必重複它。然後你可以做'window.onload = cl'和'setTimeout(cl,5000)' –
這段代碼是否準備好了?我想知道如果問題可能是「loader」在您調用該函數時爲null,因爲在某些奇怪的情況下,html還沒有呈現。該頁面上的腳本在哪裏?它在html之後嗎? –