#yyds干货盘点#前端图片预加载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#前端图片预加载相关的知识,希望对你有一定的参考价值。

上一篇文章讲了图片懒加载的两种方法,今天再来讲讲图片预加载。

用css和javascript实现预加载

实现预加载图片有很多方法,包括使用css、JavaScript及两者的各种组合。这些技术可根据不同设计场景设计出相应的解决方案,十分高效。

单纯使用CSS,可容易、高效地预加载图片,代码如下:

#preload-01  background: url(http://domain.tld/image-01.png) no-repeat -9999px -9999px;   

#preload-02 background: url(http://domain.tld/image-02.png) no-repeat -9999px -9999px;

#preload-03 background: url(http://domain.tld/image-03.png) no-repeat -9999px -9999px;
复制代码

将这三个ID选择器应用到(X)html元素中,我们便可通过CSS的background属性将图片预加载到屏幕外的背景上。

只要这些图片的路径保持不变,当它们在Web页面的其他地方被调用时,浏览器就会在渲染过程中使用预加载(缓存)的图片。简单、高效,不需要任何JavaScript。

该方法虽然高效,但仍有改进余地。使用该法加载的图片会同页面的其他内容一起加载,增加了页面的整体加载时间。

为了解决这个问题,我们增加了一些JavaScript代码,来推迟预加载的时间,直到页面加载完毕。代码如下:

function preloader()   

if (document.getElementById)

document.getElementById("preload-01").style.background = "url(http://domain.tld/image-01.png) no-repeat -9999px -9999px";

document.getElementById("preload-02").style.background = "url(http://domain.tld/image-02.png) no-repeat -9999px -9999px";

document.getElementById("preload-03").style.background = "url(http://domain.tld/image-03.png) no-repeat -9999px -9999px";





function addLoadEvent(func)

var oldonload = window.onload;

if (typeof window.onload != function)

window.onload = func;

else

window.onload = function()

if (oldonload)

oldonload();



func();







addLoadEvent(preloader);

在该脚本的第一部分,我们获取使用类选择器的元素,并为其设置了background属性,以预加载不同的图片。

该脚本的第二部分,我们使用addLoadEvent()函数来延迟preloader()函数的加载时间,直到页面加载完毕。

如果JavaScript无法在用户的浏览器中正常运行,会发生什么?很简单,图片不会被预加载,当页面调用图片时,正常显示即可。

使用Ajax实现预加载

ajax实现预加载效果要更好一些,该方法利用DOM,不仅仅预加载图片,还会预加载CSS、JavaScript等相关的东西。使用Ajax,比直接使用JavaScript,优越之处在于JavaScript和CSS的加载不会影响到当前页面。该方法简洁、高效。

window.onload = function()   

setTimeout(function()

// XHR to request a js and a CSS

var xhr = new XMLHttpRequest();

xhr.open(GET, http://domain.tld/preload.js);

xhr.send();

xhr = new XMLHttpRequest();

xhr.open(GET, http://domain.tld/preload.css);

xhr.send();

// preload image

new Image().src = "http://domain.tld/preload.png";

, 1000);

;

上面代码预加载了“preload.js”、“preload.css”和“preload.png”。1000毫秒的超时是为了防止脚本挂起,而导致正常页面出现功能问题。

下面,我们看看如何用JavaScript来实现该加载过程:

window.onload = function()   

setTimeout(function()

// reference to <head>

var head = document.getElementsByTagName(head)[0];

// a new CSS

var css = document.createElement(link);

css.type = "text/css";

css.rel = "stylesheet";

css.href = "http://domain.tld/preload.css";

// a new JS

var js = document.createElement("script");

js.type = "text/javascript";

js.src = "http://domain.tld/preload.js";

// preload JS and CSS

head.appendChild(css);

head.appendChild(js);

// preload image

new Image().src = "http://domain.tld/preload.png";

, 1000);

;

以上是关于#yyds干货盘点#前端图片预加载的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#愚公系列2022年12月 微信小程序-图片加载和全屏适配问题

#yyds干货盘点#数据可视化总结

#yyds干货盘点#前端在线预览PDF文件

#yyds干货盘点#前端迪米特法则

#yyds干货盘点# 前端模块化的全面总结

#yyds干货盘点# 牛客最新前端JS笔试百题