Javascript 平滑预加载大型背景图像

Javascript 平滑预加载大型背景图像,javascript,css,image,background,preload,Javascript,Css,Image,Background,Preload,我有一个网站,它使用大屏幕(60-100k)背景图像,每页都不同 当用户第一次加载页面时,首先加载页面内容,然后在短时间内显示背景图像。我理解,这是浏览器中的预期行为,但它使页面加载在较慢的连接上看起来相当“不平稳” 我曾想过用一个加载“掩码”来隐藏页面,当背景图像加载后,JS会将其删除……但这仍然是一个相当丑陋的方法 如何使页面内容和背景图像同时显示给用户?更好的方法可能是使用jquery并在加载后淡入背景图像。此外,您还可以尝试在用户单击下一页之前预加载下一幅图像,使其更加平滑 如果你延迟内

我有一个网站,它使用大屏幕(60-100k)背景图像,每页都不同

当用户第一次加载页面时,首先加载页面内容,然后在短时间内显示背景图像。我理解,这是浏览器中的预期行为,但它使页面加载在较慢的连接上看起来相当“不平稳”

我曾想过用一个加载“掩码”来隐藏页面,当背景图像加载后,JS会将其删除……但这仍然是一个相当丑陋的方法


如何使页面内容和背景图像同时显示给用户?

更好的方法可能是使用jquery并在加载后淡入背景图像。此外,您还可以尝试在用户单击下一页之前预加载下一幅图像,使其更加平滑

如果你延迟内容的显示直到图像显示出来,这只会激怒你的用户。他们(可能)在那里主要是为了获取信息,所以永远不要碰任何延迟这一过程的东西


这是一个例外,一些不了解网站的人会点击一些东西,他们不关心任何东西,除了看起来漂亮之外。

更好的方法可能是使用jquery,在加载后淡入背景图像。此外,您还可以尝试在用户单击下一页之前预加载下一幅图像,使其更加平滑

如果你延迟内容的显示直到图像显示出来,这只会激怒你的用户。他们(可能)在那里主要是为了获取信息,所以永远不要碰任何延迟这一过程的东西


这是一个例外,一些不了解网站的人会点击一些东西,除了看起来漂亮之外,他们什么都不关心。

这里最好的解决方案是尝试找到一种方法,让图像变小。有一些很好的压缩工具。我建议您看看ImageMagick,一些特定于JPEG的工具()或特定于PNG的工具()

但要执行您特别要求的操作—隐藏页面上的所有内容,直到准备就绪,然后将其加载—您可以使用jQuery并执行以下操作:

$(function(){
    var bgimage = new Image();      
    bgimage.src="{your giant image's URL goes here}";       

    $(bgimage).load(function(){
        $("body").css("background-image","url("+$(this).attr("src")+")").fadeIn();                  
    });
});
这样做的目的是等待所有元素加载到页面上,然后创建一个新的图像对象。我们将源指向您的较大图像文件。加载完成后,我们更改背景以使用新加载的图像,该图像应立即加载,因为浏览器缓存了它

我有fadeIn(),以防你想隐藏页面上的所有内容,直到它准备好。这意味着你应该把这个隐藏起来

出于某种原因,如果采用这种方法,fadeIn()比show()或通过removeClass()简单地删除“隐藏”类效果更好。使用后两种方法,标签似乎会调整其高度以适应页面内容,这可能导致不显示整个背景图像

老实说,我并不推荐这种方法

至少,如果要在页面准备就绪之前隐藏页面上的所有内容,就不需要这样做

这可能是一种仅在背景图像准备就绪时才显示背景图像的好方法,避免显示部分加载的图像


较慢的加载速度只是使用大型图像的折衷方案

这里最好的解决方案是尝试找到一种方法来缩小图像。有一些很好的压缩工具。我建议您看看ImageMagick,一些特定于JPEG的工具()或特定于PNG的工具()

但要执行您特别要求的操作—隐藏页面上的所有内容,直到准备就绪,然后将其加载—您可以使用jQuery并执行以下操作:

$(function(){
    var bgimage = new Image();      
    bgimage.src="{your giant image's URL goes here}";       

    $(bgimage).load(function(){
        $("body").css("background-image","url("+$(this).attr("src")+")").fadeIn();                  
    });
});
这样做的目的是等待所有元素加载到页面上,然后创建一个新的图像对象。我们将源指向您的较大图像文件。加载完成后,我们更改背景以使用新加载的图像,该图像应立即加载,因为浏览器缓存了它

我有fadeIn(),以防你想隐藏页面上的所有内容,直到它准备好。这意味着你应该把这个隐藏起来

出于某种原因,如果采用这种方法,fadeIn()比show()或通过removeClass()简单地删除“隐藏”类效果更好。使用后两种方法,标签似乎会调整其高度以适应页面内容,这可能导致不显示整个背景图像

老实说,我并不推荐这种方法

至少,如果要在页面准备就绪之前隐藏页面上的所有内容,就不需要这样做

这可能是一种仅在背景图像准备就绪时才显示背景图像的好方法,避免显示部分加载的图像


较慢的加载速度只是使用大型图像的折衷方案

在现代浏览器中,你可以用它来缓解这个问题,回到你目前的IE 6/7技术上来。

在现代浏览器中,你可以用它来缓解这个问题,回到你目前的IE 6/7技术上来。

100k背景图像对我来说有点艺术化。我会使身体的背景颜色类似于背景图像。然后用户可以开始使用该网站。预加载所有背景图像可能是最好的主意。是的,老实说,这是一个相当有艺术性的创意。大约有30个独立的背景图像,无法知道用户下一步会选择哪一个,所以我认为预加载有点不太可能?你在背景图像中淡入淡出的想法听起来很不错,尽管我认为我们会使用它,干杯。100k背景图像对我来说有点艺术化。我会使身体的背景颜色类似于背景图像。然后用户可以开始使用该网站。预加载铝