js 函数的多图片预加载(preload) 带插件版完整解析
前言:
本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽。
本篇文章为您分析一下原生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) 带插件版完整解析的更多相关文章
- js 函数的多图片懒加载(lazy) 带插件版完整解析
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片懒加载效果 页面需求 1 ...
- JS代理模式实现图片预加载
---恢复内容开始--- 刚刚说了懒加载,现在我们来搞搞预加载吧 预加载的核心: 图片等静态资源在使用前提前请求. 资源后续使用可以直接从缓存中加载,提升用户体验. 几个误区: 预加载不是为了减少页面 ...
- jquery.imgpreload.min.js插件实现页面图片预加载
页面分享地址: http://wenku.baidu.com/link?url=_-G8miwbgDmEj6miyFtjit1duJggBCJmFjR2jky_G1VftD9eS9kwGOlFWAOR ...
- 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!
一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...
- Javascript实现图片预加载【回调函数,多张图片】
使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多张图片预加载代码.当接二连三的案例中都涉及图片预加载时,就 ...
- JS实现图片预加载无需等待
网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考 ...
- Javascript兑现图片预加载【回调函数,多张图片】 (转载)
Javascript实现图片预加载[回调函数,多张图片] 使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多 ...
- 外贸建站之图片预加载JS代码分享
外贸建站之图片预加载JS代码分享 function preloadimg() { setTimeout(function() { new Image().src = "images/2017 ...
- js原生图片懒加载 或 js原生图片预加载,html标签自定义属性
使用原声js来实现图片预加载,或图片懒加载,小伙伴们可以根据项目需要来结合vue或者是react来进行修改. 一.什么是图片懒加载或什么是图片预加载 当访问一个页面的时候,先把img元素或是其他元素的 ...
随机推荐
- Integer类的进制之间转换的方法
一.两个通用方法 1.public static String toString(int i,int radix) (1)作用 将十进制的数转化成指定进制数的字符串形式:radix参数指进制数: (2 ...
- Vulnhub DC-2靶机渗透
信息搜集 nmap扫描端口 nmap -sV 192.168.146.140 -p1-10000 开了80端口,那就直接访问一下把.(7744端口是ssh端口,之后会用到) 输入ip,发现url处变成 ...
- 家庭记账本app进度之android中AlertDialog的相关应用以及对日期时间的相关操作(应用alertdialog使用的谈话框)
对于AlertDialog的相关知识: 1.创建构造器AlertDialog.Builder的对象: 2.通过构造器对象调用setTitle.setMessage.setIcon等方法构造对话框 ...
- 数据结构和算法(Golang实现)(30)查找算法-2-3-4树和普通红黑树
文章首发于 阅读更友好的GitBook. 2-3-4树和普通红黑树 某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较 ...
- Web前端必备-Nginx知识汇总
一.Nginx简介 Nginx是一个高性能.轻量级的Web和反向代理服务器, 其特点是占有内存及资源少.抗并发能力强. Nginx安装简单.配置简洁.启动快速便捷.支持热部署.支持 SSL.拥有高度模 ...
- 中阶d03.3 JDBC_CURD_Util --- 使用 junit执行单元测试(增删改查)
1.单元测试环境准备 https://www.cnblogs.com/longesang/p/11399010.html 2.测试 3.结果返回 4.代码 新建一个test目录统一存放测试案例 查: ...
- syncronized如何上锁
上锁,根据操作系统所说的原则,对共享变量上锁,对临界区上锁.谁访问临界资源?就给谁上锁 同步监视器,它上锁的对象. 1.用关键字给方法上锁 2.用synchronized代码块上锁 默认上锁对象:th ...
- C#多线程(6):线程通知
目录 AutoRestEvent 类 常用方法 一个简单的示例 解释一下 复杂一点的示例 解释 回顾一下,前面 lock.Monitor 部分我们学习了线程锁,Mutex 部分学习了进程同步,Sema ...
- [总结]Floyd算法及其应用
目录 一.Floyd算法 二.Floyd算法的应用 1. 传递闭包 例1:P2881 [USACO07MAR]排名的牛Ranking the Cows 例2:P2419 [USACO08JAN]牛大赛 ...
- 用Python画的,5 种非传统的可视化技术,超炫酷的动态图
数据可以帮助我们描述这个世界.阐释自己的想法和展示自己的成果,但如果只有单调乏味的文本和数字,我们却往往能难抓住观众的眼球.而很多时候,一张漂亮的可视化图表就足以胜过千言万语.本文将介绍 5 种基于 ...