当前位置: 首页 > 面试题库 >

使用JavaScript / jQuery预加载图像的最佳方法?

左丘恩
2023-03-14
问题内容

我完全意识到,无论是在SO还是离线状态下,这个问题在任何地方都被提出并得到了回答。但是,每次似乎都有不同的答案,例如this,this和that。

我不在乎是否在使用jQuery-重要的是它可以工作,并且是跨浏览器的。]

那么,预加载图像的最佳方法是什么?


问题答案:

不幸的是,这取决于您的目的。如果您打算将图像用于样式目的,则最好的选择是使用精灵。

但是,如果您打算使用<img>标记中的图像,则需要使用

function preload(sources)
{
  var images = [];
  for (i = 0, length = sources.length; i < length; ++i) {
    images[i] = new Image();
    images[i].src = sources[i];
  }
}

使用newImage()不涉及使用DOM方法的开销,但是对指定图像的新请求将添加到队列中。由于图像目前尚未真正添加到页面,因此不涉及重新渲染。但是,我建议将其添加到页面的末尾(所有脚本应尽可能添加),以防止其占用更多关键元素。

编辑:编辑以正确反映评论,指出Image需要单独的对象才能正常工作。谢谢,我很遗憾没有更仔细地检查它。

Edit2:编辑以使可重用性更加明显

编辑3(3年后):

由于浏览器处理不可见图像的方式发生了变化(display:none或在此答案中从未附加到文档中),因此首选新的预加载方法。

您可以使用Ajax请求来强制早期检索图像。例如,使用jQuery:

jQuery.get(source);

或者在前面的示例中,您可以执行以下操作:

function preload(sources)
{
  jQuery.each(sources, function(i,source) { jQuery.get(source); });
}

请注意,这不适用于按原样运行的精灵。这仅适用于带有图片的照片画廊或滑块/转盘,这些图片由于最初不可见而无法加载。

另请注意,此方法不适用于IE(通常不使用ajax来检索图像数据)。



 类似资料:
  • 问题内容: Angular的ng- src会保留以前的模型,直到它在内部预加载图像为止。我在每个页面上的横幅使用不同的图像,当我切换路线时,我更改主视图,保留标题视图,仅在拥有它时更改bannerUrl模型。 这导致在加载新的横幅图像时看到先前的横幅图像。 令我惊讶的是,目前还没有指令,但是我想在尝试构建指令之前先进行讨论。 我想做的是在自定义属性上设置横幅模型。喜欢: 然后$ scope.wat

  • 问题内容: 我在下面编写的功能是否足以在当今大多数(如果不是全部)浏览器中预加载图像? 我有一个图像URL数组,可以循环访问这些URL,并为每个URL 调用该函数。 问题答案: 是。这应该适用于所有主要的浏览器。

  • 问题内容: 我正在寻找一种快速简单的方法来用JavaScript预加载图像。如果重要的话,我正在使用jQuery。 但是,对于我想要的东西来说似乎有点过高了! 我知道那里有执行此操作的jQuery插件,但它们看上去都很大(大小);我只需要一种快速,轻松和简短的方式来预加载图像! 问题答案: 快速和简单的: 或者,如果您想要一个jQuery插件:

  • 问题内容: 我整理了一个非常类似于flickr照片流功能的脚本。两个缩略图彼此相邻,当您单击下一个或上一个链接时,下一个(或上一个)两个图像就会滑入其中。 当前,页面加载时将加载两个图像。第一次使用nxt / prv时,随后的两个图像或前两个图像通过ajax加载,第一个图像的ID在url中传递,而两个新图像的HTML通过ajax返回并显示。 足够简单,但是我不得不考虑在连接速度慢或服务器负载重的情

  • 本文向大家介绍jQuery预加载图片常用方法,包括了jQuery预加载图片常用方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery预加载图片常用方法。分享给大家供大家参考。具体如下: 方法1: 方法2: 希望本文所述对大家的jQuery程序设计有所帮助。

  • 本文向大家介绍jQuery实现预加载图片的方法,包括了jQuery实现预加载图片的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现预加载图片的方法。分享给大家供大家参考。具体分析如下: 这段js代码用于预加载图片,记住是预加载,不是后加载哟,就是在图片还不显示的时候就将图片下载到用户浏览器的缓存中,这样要显示的时候就非常快,无需再到服务器上去读取图片。 希望本文所述对大