如何加载html文本,直到加载背景图像精灵?

时间:2011-02-08 19:00:22

标签: jquery css load window background-image

下面是一些我想用jQuery控制的示例代码(黑页bg上的白色按钮bg):

    <ul class="buttons">
        <li class="button-displays"><a href="/products/">Products and Services for the company</a></li>
        <li class="button-packaging"><a href="/packaging/">Successful packaging services for the company</a></li>
        <li class="button-tools"><a href="/tools/">Data, mail and print tools for your company</li>
    </ul>

在CSS文件中,我有以下内容:

    .buttons li { background-image: url(images/sprite.png); height:126px; width:293px; float:left; margin:0 0 0 9px; }
    .button-displays { background-position: 0 125px; }
    .button-packaging { background-position: 0 250px; }
    .button-tools { background-position: 0 375px; }

我将这些列表项设置为看起来像可点击的按钮,背景精灵有助于填写按钮的背景。

我的客户端在Firefox和Safari中不喜欢它,当页面第一次加载时,锚点内的文本首先加载li的背景精灵(大约150kb b / c我总共6个按钮)仅在完全下载精灵时加载。在下载几秒后,背景突然出现,将文本单独留在锚点中,直到背景弹出。

我尝试使用以下代码,希望它会延迟加载此标记和CSS:

    $('.buttons li a').load(function() {
    });

    $(window).load(function() {
        $(.buttons);
    });

我不明白jQuery是否足以知道这是否会迫使代码等到所有元素加载后再出现。我宁愿强制按钮代码中的列表项元素延迟出现在页面上,直到bg img sprite完全加载为止。

感谢您的帮助和建议!

4 个答案:

答案 0 :(得分:5)

我认为您不能专门为背景图像附加加载事件。

请改为尝试:

制作.button li元素display:none

.buttons li { display:none; background-image: url(images/sprite.png); height:126px; width:293px; float:left; margin:0 0 0 9px; }

然后在你的jQuery中,使用精灵的URL创建一个图像,并附加一个load处理程序,它将显示按钮。

$(function() {
      // create a dummy image
    var img = new Image();

      // give it a single load handler
    $(img).one('load',function() {
        $('.buttons li').fadeIn(); // fade in the elements when the image loads
    });

      // give it the src of your background image
    img.src = "images/sprite.png";

      // make sure if fires in case it was cached
    if( img.complete )
        $(img).load();
});

答案 1 :(得分:3)

我认为你走在正确的轨道上。 JQuery的加载函数在所选元素完全加载后执行 - 意味着所有内容都被下载。问题在于您的代码,在下载内容之前,按钮标记将会下载。因此,您可以使用jQuery通过load事件完全显示按钮。因此,设置隐藏在CSS中的按钮(可见性:隐藏)。然后,使用$(document).load(function(){})来显示按钮:

$(window).load(function(){
    $('.button').css({visibility: 'visible'});
})

答案 2 :(得分:0)

中写下你的代码
$(document).ready(function(){

//your logic here 

});

这确保您的DOM操作在DOM被完全编码后开始...

加上你也可以使用

$("#yourDOMelementID").ready(function(){

});

确保准备好操作目标元素......

更多延迟事件处理程序,您可以使用.setTimeOut()或在某些情况下使用.delay()

答案 3 :(得分:0)

将按钮设置为最初隐藏,然后在li上执行jquery load,因为这是应用了背景图像的内容:

$('.buttons li').load(function() {
        $('.buttons').show();
    });