正如它的標題我有一個window.load行說:執行代碼,如果內容需要更長的時間比7S加載
$(window).load(function() {
//Some Code
});
因此,一旦一切都裝我執行//Some Code
,但是我想這樣做,如果內容沒有加載,讓說,在7秒內(也許大圖像文件,或丟失文件發生等),比執行//Some Code
,即使內容未完全加載。 我該如何完成這項任務?
正如它的標題我有一個window.load行說:執行代碼,如果內容需要更長的時間比7S加載
$(window).load(function() {
//Some Code
});
因此,一旦一切都裝我執行//Some Code
,但是我想這樣做,如果內容沒有加載,讓說,在7秒內(也許大圖像文件,或丟失文件發生等),比執行//Some Code
,即使內容未完全加載。 我該如何完成這項任務?
你可以這樣做:
function someCode() {
if (someCode.done) return;
someCode.done = true;
clearTimeout(t);
// Some Code
}
var t = setTimeout(someCode, 7000);
$(window).load(someCode);
由於遞延對象只能一次解決,這可以作爲一個解決方案:
var runCodeDeferred = $.Deferred(function(deferred){
$(window).load(deferred.resolve);
setTimeout(deferred.resolve,7000)
});
runCodeDeferred.done(function(){
//Some Code
});
同樣可以用$.Callbacks
對象來完成:
var callbacks = $.Callbacks("once");
$(window).load(callbacks.fire);
setTimeout(callbacks.fire,7000);
callbacks.add(function(){
//Some Code
});
但是它與做:
var timer;
function someCode() {
//Some Code
}
$(window).on("load.someCode",function(){
clearTimeout(timer);
someCode();
});
setTimeout(function(){
$(window).off("load.someCode");
someCode();
},7000);
他們都把這個把戲對嗎?你認爲哪一個是更優雅的解決方案?我在想回調? – Ilja
好吧,使用延期或回調在我看來看起來更清潔,但比使用第三種選擇或銷燬方法花費更多。我這樣做的三種方式背後的想法是保持負載邏輯在'// Some Code'區域之外,以保持簡單。 –
丟失的文件可以用'img.onerror = function(){...}'來檢測。 –