【问题标题】:Wait for back image to be loaded等待加载背景图像
【发布时间】:2012-11-05 23:40:10
【问题描述】:

我的 javascript 中有这一行:

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)");

“botbg”是一个 div。 是否可以将回调附加到此函数?我只是希望其他操作等到完成。

这些都没有成功:

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)").load(function(){
//...
});

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)").one("load", function(){
//...
});

$("#botbg").css("background-image", "url(/png/" + epage + ".jpg)").ready(function(){
//...
});

【问题讨论】:

    标签: javascript jquery html image


    【解决方案1】:

    在 jQuery 中,回调函数仅适用于 asynchronous 任务,并且由于 css 函数是 synchronized 函数,因此没有回调之类的东西,因此您在 @987654325 之后放置的每一行代码@函数将被立即调用。

    但是,您可以跟踪背景图像的负载,但即使这样做,也不能保证您的代码将在图像显示后执行,特别是在浏览器需要一些时间render 的大图像中图片。要跟踪您的图像是否已加载,您可以执行以下操作:

    $img = $('<img src="/png/'+epage+'.jpg" id="myImg"/>');//now it will work
    $img.bind('load',function(){
        $("#botbg").css("background-image", "url(/png/" + epage + ".jpg)");
    });
    

    这是一个功能性的fiddle

    我希望它有所帮助。干杯

    【讨论】:

    • 我在回调后发出警报.. 它没有触发:S
    • 很抱歉,我会进行编辑以使其正确。笨蛋我忘了一个重要的细节
    【解决方案2】:

    试试

    var img = new Image();
    img.src = url;
    img.onload = function( ) {
        $("#botbg").css("background-image", "url(" + url + ")");
    }
    

    【讨论】:

    • “function(){”之后的警报没有触发:S
    【解决方案3】:

    不,你不能。

    您可以做的最好的事情是将图像加载到临时 div 中,然后在调用加载回调时设置背景图像,如下所示:

    <div id="tmp"><img src="/png/yourimage.jpg" /></div>
    
    $("#tmp").load(function(){
        $("#botbg").css("background-image", "url(/png/yourimage.jpg)");
    });
    

    编辑

    调用 .load() 函数的新方法

    <div id="tmp"><img src="/png/yourimage.jpg" /></div>
    
    $("#tmp").on("load", function() {
        $("#botbg").css("background-image", "url(/png/yourimage.jpg)");
    });
    

    【讨论】:

    • 虽然此解决方案可能有效,但不建议这样做,因为 load()已弃用,而且它不能始终如一地工作,也不能可靠地跨浏览器。
    • 好的,我不知道,我已经更新了我的答案。到这个帖子stackoverflow.com/questions/12643160/load-method-deprecated
    • 你不只是测试 div tmp 是否已加载,而不是测试 img 是否已加载?
    • 是的,我在我的网站上使用此代码,但您的解决方案比我的要好 => +1
    • 不幸的是,这只解决了一半的问题。将它与.on('load') 一起使用不会使事件与图像一起使用时更加可靠。在此处的文档页面上查看 与图像一起使用时加载事件的注意事项api.jquery.com/load-event
    猜你喜欢
    • 2019-02-19
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2014-02-17
    相关资源
    最近更新 更多