【问题标题】:Preloading images in Javascript在 Javascript 中预加载图像
【发布时间】:2012-05-23 19:06:54
【问题描述】:

我创建了一个简单的照片库查看器,我想在后台预加载图像,然后在完成后运行一个函数。

我的问题是,我该怎么做?

【问题讨论】:

标签: javascript image web gallery photos


【解决方案1】:

要预加载图像,请使用<link> 标记并将preload 添加到rel-属性:

<link rel=preload href=path/to/the/image.jpg as=image>

或者在 Javascript 中:

var preImg = document.createElement('link')
preImg.href = 'path/to/image.jpg'
preImg.rel = 'preload'
preImg.as = 'image'
document.head.appendChild(preImg)

元素的 rel 属性的预加载值允许你 在您的 HTML 中编写声明性获取请求,指定 您的页面在加载后很快就会需要的资源,您 因此希望在页面生命周期的早期开始预加载 在浏览器的主要渲染机制启动之前加载。这 确保它们更早提供并且不太可能 阻止页面的第一次渲染,从而提高性能。

文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content

【讨论】:

    【解决方案2】:

    与典型的 Javascript 函数相比,我喜欢这种 CSS 方法:

    把它放在你的 CSS 文件中:

    div#preload { display: none; }
    

    将其放在 HTML 文档的底部:

    <div id="preload">
       <img src="http://domain.tld/image-01.png" width="1" height="1" alt="Image 01" />
       <img src="http://domain.tld/image-02.png" width="1" height="1" alt="Image 02" />
       <img src="http://domain.tld/image-03.png" width="1" height="1" alt="Image 03" />
    </div>
    

    此方法可确保您的图像已预加载并可用于文档的其他位置。请记住使用与预加载图像相同的路径。

    http://perishablepress.com/pure-css-better-image-preloading-without-javascript/

    【讨论】:

    • 你怎么知道图片何时加载完成?与我在下面发布的方法相比,这里有什么优势?请注意,您发布的链接中的 cmets 说的完全相同,建议不要使用此方法!
    • 除了DR.Dredel说的,每次都需要加载不同的图片,所以我不会用css,因为gallery和图片id在javascript中
    • 使用我的方法,只需替换您传递给 src 属性的 url 字符串,您将加载不同的图像。显然,您可以在页面上拥有任意数量的 Image 对象。
    • 浏览器真的会加载不可见的图片吗?
    • @Bergi,浏览器不关心它们是否可见,事实上,浏览器甚至没有兴趣担心它们的可见性,直到有实际的字节数据要显示,所以是的,他们会下载你告诉他们的 src 是什么,然后看看下一步该做什么。
    【解决方案3】:
    var image = new Image();
    image.src = "http://foo.com/myimage.jpg";
    
    //if you have a div on the page that's waiting for this image...
    var div = getElementById("imageWrapperDiv");
    
    //you can set it on the image object as the item to draw into...
    image.myDiv = div;
    
    image.onload = function(){
      //do whatever you're going to do to display the image
    
      //so in this example, because I have set this objects myDiv property to a div on the page
     // I can then just populate that div with an img tag.
     //it's not the most elegant solution, but you get the idea and can improve upon it easily
      this.myDiv.innerHTML = "<img src='" +  this.src  +"'>";
    }
    

    一旦图像加载,它就在浏览器的缓存中,因此,如果您使用 src 属性,您可以在页面的任何位置绘制它,它会立即显示。

    【讨论】:

    • 这似乎是我正在寻找的解决方案!所以如果我想在加载完成后写入图像,我应该创建一个写入函数,并将 image.src 用作目录?
    • image.src 只是一个字符串。我将编辑我的答案,向您展示如何实际显示图像
    • 感谢您的更新和答案,我现在将尝试在我的网站上实施它,看看是否适合我
    • 请记住,如果您完全按照此示例进行操作,则在页面加载完成之前您无需执行任何操作,否则 getElementById("imageWrapperDiv") 将返回 undefined,因为没有这样的元素,直到页面加载(并在其中某处包含
      标记!
    • 我没有完全按照你写的那样做,我使用的是你之前未实现的例子
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签