#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干货盘点#前端图片预加载的主要内容,如果未能解决你的问题,请参考以下文章