图片预加载的几个注意点

1. 应用场景

在制作图片墙,相册这样的单页图片资源比较大的页面时,为了能让用户有流畅的使用体验,需要提前将图片缓存到本地,这就是图片预加载的用途。

2. 原理

提前将图片缓存到本地后,如果图片路径不变,页面在使用图片时,浏览器就可以直接使用缓存了。
具体方法如下:
js有一个Image对象,页面中每有一个标签,就说明有一个image实例。如果想预加载图片,可以提前定义image对象并指定src。

  • 写法一
function imgPreload(url){
    var img = new Image();
    img.onload = function(){
        alert('img is loaded');
    };
    img.onerror = function (){
        alert('img loading error!');
    };
    img.src = url;
}
  • 写法二
function imgPreload(url){
    var img = new Image();
    img.src = url;
    if(img.complete){
        alert('img is loaded');
    }else {
        img.onload = function (){
            alert('img is loaded');
        };
        img.onerror = function (){
            alert('img loading error!');
        };
    }
}

下面说一下几个需要注意的地方:

  1. 方法一必须先绑定onload,后指定src。原因是如果先指定src,可能在还没有给img对象绑定监听器时,图片已经加载完了,这样的话,onload的回调函数将不再执行。如果一定要先指定src的话,可以使用方法二,先判断img的complete属性,如果已经加载完,那么comeplete为true,否则为false。
  2. onload是事件,complete是状态。(这里说句题外话:绑定事件的方式更适合那种同一个对象触发多次事件的情况(比如click,keyup),并且不在乎绑定事件前是否已经触发过该事件的场景。但本例中只能联合使用onload和complete实现图片预加载)。
  3. 注意加上onerror事件,因为img不一定能成功加载,如果没有加载成功,可以使用回调函数处理。

补充:预加载gif图有可能多次触发onload事件,在onload事件被触发时,应该清除事件监听,代码如下。

img.onload = function(){
    img.onload = null;
    alert('img is onload');
}

posted on   wudipmd  阅读(1508)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示