前言:

        本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽。

        本篇文章为您分析一下原生JS实现图片预加载效果

本篇文章写的不是特别完整,代码冗余量较高,写这篇博客
一是为了随笔记录一下笔者对这块知识点的理解
二是为了让一些初学者能大致了解图片的预加载原理
后续会陆续在此基础上跟新迭代现有的代码。
笔者希望读者能提供一些更加优化的代码,当然,最好是ECMAScript 2015以前的,感激不尽

页面需求

 1. 在用户刚刚进入页面时,可能由于网络的差异,先加载一张默认的图片。等把页面的图片都下载好之后再添加到默认图片区域内。

HTML结构


<div class="preload"></div>

CSS样式


    img {
        width: 300px;
        height: 250px;
    }

JS行为

JS大致思路
 1. 根据用户传入的配置信息设置

     (1).图片数组
     (2).是否加载完再渲染
     (3).回调函数
     (4).渲染的元素

 2. 配置默认值

 3. 判断是否是下载完立即渲染的情况

 4. 如果加载完以后需要执行的函数

 5. 如果不是下载完再执行的情况

 6. 下载完图片以后调用回调函数

if (!window.myPlugin) {
    window.myPlugin = {};
}
/**
 * 多图片的预加载
 * @param {Object} option 包含默认图片的路径、真实图片路径数组、渲染的dom元素、是否图片下载完再渲染、完成之后的回调函数、
 */
window.myPlugin.preload = function (option) {
    if (option.immediate === undefined) {
        option.immediate = true;
    }
    option.arr = (typeof option.arr !== "object") ? [option.arr] : option.arr;
    // 第六步: 计数
    var count = 0;
    if (option.immediate) {                            // 第三步: 如果是下载完立即渲染
        option.arr.forEach(function (ele) {            // 3.1 遍历图片数组
            var image = new Image();                   // 3.2 创建原始图片对象
            option.dom.appendChild(image);             // 3.3 将对象插入节点
            image.setAttribute("src", option.defaultImg);  // 3.4 设置默认图片
            var newImage = new Image();                // 3.5 创建一个临时的图片对象
            newImage.setAttribute("src", ele)          // 3.6 设置路径用于请求图片
            newImage.onload = function () {            // 第四步: 图片加载完成事件
                // 6.1 每次加载完一张图片count+1;
                count++;
                // 4.1 判断当前的图片对象是否还是默认图片
                if (image.getAttribute("src") === option.defaultImg) {
                    // 4.2 将下载后的图片路径修改到原始图片对象
                    image.setAttribute("src", ele);
                }
                // 6.2 判断当前的次数是否等于了数组的长度(加载完图片之后运行的函数)
                if (count === option.arr.length) {
                    // 6.3 运行加载完之后的回调函数 ,传入参数
                    option.callback.call(this);
                }
            }
        })
    } else {  // 第五步: 如果不是下载完再渲染
        option.arr.forEach(function (ele) {                          // 5.1 遍历图片数组
            var image = new Image();                                 // 5.2 创建原始图片对象
            option.dom.appendChild(image);                           // 5.3 将对象插入节点
            image.style.background = `url(${option.defaultImg}) no-repeat`; // 5.4 设置默认图片
            image.onload = function () {
                // 6.4 每次加载完一张图片count+1;
                count++;
                // 6.5 判断当前的次数是否等于了数组的长度(加载完图片之后运行的函数)
                if (count === option.arr.length) {
                    // 6.3 运行加载完之后的回调函数 ,传入参数
                    option.callback.call(count);
                }
            }
            image.setAttribute("src", ele);                          // 5.5 设置图片路径
        })
    }
}

结语

  • 本片文章如有错误或者不好的,请给位大牛指点指点给小生。

  • 创作不易,请告知....

js 函数的多图片预加载(preload) 带插件版完整解析的更多相关文章

  1. js 函数的多图片懒加载(lazy) 带插件版完整解析

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS实现图片懒加载效果 页面需求 1 ...

  2. JS代理模式实现图片预加载

    ---恢复内容开始--- 刚刚说了懒加载,现在我们来搞搞预加载吧 预加载的核心: 图片等静态资源在使用前提前请求. 资源后续使用可以直接从缓存中加载,提升用户体验. 几个误区: 预加载不是为了减少页面 ...

  3. jquery.imgpreload.min.js插件实现页面图片预加载

    页面分享地址: http://wenku.baidu.com/link?url=_-G8miwbgDmEj6miyFtjit1duJggBCJmFjR2jky_G1VftD9eS9kwGOlFWAOR ...

  4. 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!

    一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...

  5. Javascript实现图片预加载【回调函数,多张图片】

    使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多张图片预加载代码.当接二连三的案例中都涉及图片预加载时,就 ...

  6. JS实现图片预加载无需等待

    网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考 ...

  7. Javascript兑现图片预加载【回调函数,多张图片】 (转载)

    Javascript实现图片预加载[回调函数,多张图片] 使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多 ...

  8. 外贸建站之图片预加载JS代码分享

    外贸建站之图片预加载JS代码分享 function preloadimg() { setTimeout(function() { new Image().src = "images/2017 ...

  9. js原生图片懒加载 或 js原生图片预加载,html标签自定义属性

    使用原声js来实现图片预加载,或图片懒加载,小伙伴们可以根据项目需要来结合vue或者是react来进行修改. 一.什么是图片懒加载或什么是图片预加载 当访问一个页面的时候,先把img元素或是其他元素的 ...

随机推荐

  1. NKOJ4330 逛公园

    时间限制 : - MS   空间限制 : 565536 KB  评测说明 : 3s 问题描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入 ...

  2. Java 程序该怎么优化?(技巧篇)

    搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了? 面试官:简单谈谈 Java 程序性能优化? 1. 字符串处理优化,乃优化之源. 研发过程中,String 的 API 用的应该是 ...

  3. 3-1. 基于epoll架构的视频采集端设计

    精通epoll架构 epoll:Linux中最优秀的多路复用机制! 与select .poll区别 1.select和poll没有太大区别,除了select有文件描述符限制(1024个).select ...

  4. Golang入门(1):安装与配置环境变量的意义

    摘要 在几年前学习Java的时候,环境的配置就会劝退一部分的初学者.而对于Golang来说,也需要从环境的配置开始学起.这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量 ...

  5. tp6源码解析-第二天,ThinkPHP6编译模板流程详解,ThinkPHP6模板源码详解

    TP6源码解析,ThinkPHP6模板编译流程详解 前言:刚开始写博客.如果觉得本篇文章对您有所帮助.点个赞再走也不迟 模板编译流程,大概是: 先获取到View类实例(依赖注入也好,通过助手函数也好) ...

  6. CentOS之crontab

    1.crontab介绍 功能说明:设置计时器. 语 法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr] 补充说明:c ...

  7. django->基本操作和新建项目常用配置

    一.安装django pip install django==2.1.5 -U #安装django/升级最新版本 二.创建.启动django项目 django-admin startproject m ...

  8. 大数据及hadoop简要概念

    大数据 大数据简要概念 指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合.需要新处理模式,才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产. 大数据作 ...

  9. tf.nn.bias_add 激活函数

    tf.nn.bias_add(value,bias,data_format=None,name=None) 参数: value:一个Tensor,类型为float,double,int64,int32 ...

  10. 010-字符串-C语言笔记

    010-字符串-C语言笔记 学习目标 1.[掌握]二维数组的声明和初始化 2.[掌握]遍历二维数组 3.[掌握]二维数组在内存中的存储 4.[掌握]二维数组与函数 5.[掌握]字符串 一.二维数组的声 ...