如果内容需要超过7秒才能加载,请在window.load中执行代码

时间:2013-04-12 14:23:17

标签: javascript jquery

正如标题中所说,我有一个window.load行:

$(window).load(function() { 
   //Some Code
});

所以一旦加载了所有内容,我执行//Some Code,但是如果没有加载内容,我想这样做,假设在7秒内(可能是大图像文件,或者丢失文件等)比执行//Some Code即使内容未完全加载。 我怎样才能完成这项任务?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

function someCode() {
    if (someCode.done) return;
    someCode.done = true;
    clearTimeout(t);
    // Some Code
}
var t = setTimeout(someCode, 7000);
$(window).load(someCode);

答案 1 :(得分:2)

由于延迟对象只能解析一次,因此可以用作解决方案:

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);