zoukankan      html  css  js  c++  java
  • 图片预加载的几个注意点

    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');
    }
    
  • 相关阅读:
    react条件渲染
    js用replaceAll全部替换的方法
    批量重命名图片,去除括号
    [转]自定义alert弹框,title不显示域名
    [转]ASCII码表及扩展ASCII码表,方便查阅
    [转]PHP中file_put_contents追加和换行
    Response
    Redirect
    Request
    Paginator
  • 原文地址:https://www.cnblogs.com/woodyblog/p/6044617.html
Copyright © 2011-2022 走看看