前言
正所谓金三银四五吃土,因此这些天几个前端技术群讨论最多的话题就是面试题了。某日群内讨论一道面试题:“前端如何实现大量图片预加载以及预加载进度动画进度条显示?”
恰巧本人以前jquery、zepto一把梭快乐切图的时候,写过不少形式的图片预加载动画。对于图片预加载的原理稍微了解接触过那么一点点,这里献丑一番简单写一个预加载案例,作为19年第一篇博(段)客(子)快乐一哈。
一、利用image对象搞事情
既然是利用image对象搞事情,那肯定少不了大量的img图片。因此我从名字中包含刺激二字的网站上面扒了不少各位带妹司机热血沸腾的图片,没错就是腾讯刺激战场--各种武器图片。
emmm,不皮了。我们直接进入主题内容,JavaScript当中的image对象。关于Image对象的介绍MDN上面写的, 当new Image()
的时候会生成一个HTMLImageElement
.
HTMLImageElement
这是什么?和我们熟悉的HTMLElement
这个节点有什么不同呢?顺着上面的链接提示,我们继续顺藤摸瓜,最后发现HTMLImageElement
属于HTMLElement
孩子。
既然继承了HTMLElement
特性,同理body元素有一个onload
属性,那么同理new Image得到对象也同样拥有onload
属性。
那么就让我们利用,new Image()
来搞事情
二、预加载和预加载动画实现
1、批量设置图片路径
平常我们在接触img
元素的时候,都知道书写img
标签的时候,必然少不了添加src
属性,不然图片加载不出来。所以我们第一步就是批量设置这些需要预加载的图片路径地址,这样onload
才能发挥其作用。
这里的图片太多了,一张一张的手写,未免太麻烦了。为了节省时间,这里我拿出一年多以前刚刚学Node的时候写的一个js脚本,来批量获取图片名称生成数组对象列表。
PS:这里就不挂载nodefs脚本代码,文末我将会这个小demo地址附上(包括nodefs.js
),感兴趣的小伙伴可以点击访问。
2、预加载图片效果测试
因为我此前是用的webpack工具构建的项目,支持模块引入imglist.js
. 这里我为了demo演示,因此我们就直接将这个数组对象复制粘贴到演示HTML当中。