Preload图片预加载(jQuery插件)

本文介绍了图片预加载的重要性,特别是在用户体验和页面加载速度方面。作者分析了图片加载的异步特性,并提供了有序和无序加载的解决方案。通过实现一个jQuery Preload插件,详细阐述了有序加载的原理和应用,帮助优化页面加载效果。
摘要由CSDN通过智能技术生成

背景

我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题。

比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者闪屏;

或者页面素材比较多、比较大,需要一定的加载时间,特别有时候的活动页面,我们一般会把首屏做的更多多样化或者传达比较丰富的氛围的时候,我们的首屏素材上都会比较大,有时候也会给元素加上动画来传达信息,比如我之前做的WeGame新春活动页就是这样的情况;

一般我们的处理方案是在页面素材加载完成之前显示一个有趣(不那么枯燥)的loading页,那么从重构的角度出发,我们这个素材加载状态该怎么配合loading页做处理呢,于是想到了可以监测一下浏览器加载图片的状态,并同时响应处理,比如加载完时隐藏loading页,每加载完一张图片就更新加载的百分比进度条等。

当然,值得注意的是,我们应该尽量的让用户等待loading页的时间变短,因为不要忘了,loading页也只是向后兼容处理的方案,它本身不是必须存在的。

方案分析

**场景:**除了首屏loading页加载必须的图片之外(无序加载),可能还有其他情景比如漫画网站,需要加载完前一张图片再加载下一张(有序加载)

原理:通过image 的 onload 事件判断浏览器加载图片的状态。

实现:一般我们会这样处理:

 var img = new Image();
 img.src = "logo.jpg";
 img.onload = function () {
   
    alert("image is loaded");
 };

但是这样处理有点问题,首先我们来认识两点:

1.一旦Image对象设置了src值,浏览器就会向服务器发起请求,并缓存返回的图片。

2.浏览器请求是异步的。也就是说这段代码会遍历数组,每张图片几乎同时发起请求,并不需要等待服务器返回结果后顺序发起请求。就是说,js不会傻傻地在原地等待图片的加载,而是继续读代码,直到图片加载完成,触发onload事件,js才会回来执行onload里面的内容。

基于以上两点,如果我们先赋值了图片地址,浏览器已经加载完成的时候,onload绑定事件还没有赋值上去,这样就造成了一定的误差,所以改进如下:

 var img = new Image();
 img.onload = function () {
   
    alert("image is loaded");
 };
 img.src = "logo.jpg";

先绑定事件,在赋值图片地址,确保浏览器发起请求前,图片已经绑定了onload事件。

Preload插件实现

GitHub地址:https://github.com/xiangshuo1992/preload

/**
 * 图片预加载插件Preload
 * 
 * @param array imgs  预加载的图片地址数组列表
 * @param Object options  配置参数
 */

(function ($) {
   
    function Preload(imgs, options) {
   
        this.imgs = (typeof imgs === 'string') ? [imgs] : imgs;
        this.options = {
   
            order: false, //默认值false,代表无序加载
            minTimer: 0, //完成加载的最少时间,单位ms,默认为0,一般展示类型的loading动画会需要设置
            each: null, //单张图片加载完执行的方法,一般是修改进度状态
            end: null //所有图片加载完执行的方法,一般是隐藏loading页
        };
        this.timer = Date.now();
        this.init
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值