利用CSS、JavaScript及Ajax实现图片预加载的方法


Posted in Javascript onNovember 29, 2016

预加载图片是提高用户体验的一个很好方法。图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度。这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速、无缝地发布,也可帮助用户在浏览你网站内容时获得更好的用户体验。本文将分享三个不同的预加载技术,来增强网站的性能与可用性。

实现图片预加载可以使用css、JavaScript、Ajax三种方法。下面分别介绍这些方法的实现。

使用CSS

单纯的使用css可以将图片加载到页面元素的背景上,这种方法简单、高效:

#div1{background:url(http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg) no-repeat -9999px-9999px; }
#div2{background:url(http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg) no-repeat -9999px-9999px; }

在其他地方调用时,只要路径一致,浏览器就会在渲染过程中使用预加载(缓存)的图片。简单、高效,不需要任何JavaScript。

弊端:使用这种方法,图片会随着页面加载同时加载,延长页面加载的时间,使用JavaScript辅助完成会更高效。

使用CSS和JavaScript结合

functionpreload(){
if(document.getElementById) {
document.getElementById("div1").style.background ="url(http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg) no-repeat -9999px -9999px";
document.getElementById("div2").style.background ="url(http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg) no-repeat -9999px -9999px";
} 
}
functionaddLoadEvent(func){
varoldonload =window.onload;
if(typeofwindow.onload !='function') {
window.onload = func;
} else{
window.onload =function(){
if(oldonload) {
oldonload(); 
} 
func(); 
} 
} 
}
addLoadEvent(preload);

我们把图片加载设置到页面加载完成之后,所以不必担心由于图片和页面同时加载而延长访问时间。

如果JavaScript运行失败也不必担心,仅仅是图片预加载失败而已,当调用图片时也能正常显示。

使用JavaScript实现

方法一

varimages =newArray()
functionpreload(){
for(i =0; i < preload.arguments.length; i++) {
images[i] = newImage()
images[i].src = preload.arguments[i] 
} 
}
preload( 
"http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg",
"http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg"
)

方法二

这种方法其实和方法一是一样的原理 ,只不过没有放在数组中实现,而是分别去为 Image 对象的 src 负值。

if(document.images) {
img1 = newImage();
img2 = newImage();
img3 = newImage();
img1.src = "http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg";
img2.src = "http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg";
}

使用Ajax

假设上面的所有方法都不够酷炫,那么,还有一种方法,就是使用Ajax来实现图片的预加载。使用DOM来实现预加载,可以加载包括图片,CSS,JavaScript的其他任何东西。相对于直接使用JavaScript,使用Ajax的好处就是CSS和JavaScript可以在他们的内容不影响当前页面的情况下被预加载。对于图片来说这确实不是一个问题,尽管如此,这个方法依然很简洁高效:

window.onload =function(){
setTimeout(function(){
// XHR to request a JS and a CSS
varxhr =newXMLHttpRequest();
xhr.open('GET','http://domain.tld/preload.js');
xhr.send('');
xhr = newXMLHttpRequest();
xhr.open('GET','http://domain.tld/preload.css');
xhr.send('');
// preload image
newImage().src ="http://domain.tld/preload.png";
}, 1000);
};

就像这样,这段代码会预加载三个文件:preload.js,preload.css,preload.png。设置1秒的延时主要是防止加载JavaScript文件而导致正常页面的功能性问题。

为了将其封装起来,我们看看怎么使用原生JavaScript来写这一段代码:

window.onload =function(){
setTimeout(function(){
// reference to <head>
varhead =document.getElementsByTagName('head')[0];
// a new CSS
varcss =document.createElement('link');
css.type = 'text/css';
css.rel = 'stylesheet';
css.href = 'http://domain.tld/preload.css';
// a new JS
varjs =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
newImage().src ='http://domain.tld/preload.png';
}, 1000);
};

在这里,我们通过DOM创建了三个元素来预加载了页面上的三个文件。正如原文中所提到的,对于Ajax来说,这个方法不是那么好。预加载的文件内容不应该添加到正在加载的页面中。

以上所述是小编给大家介绍的利用CSS、JavaScript及Ajax实现图片预加载的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
一个可以随意添加多个序列的tag函数
Jul 21 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
js判断url是否有效的两种方法
Mar 04 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
Oct 28 Javascript
微信小程序 实战实例开发流程详细介绍
Jan 05 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
Feb 15 Javascript
关于微信小程序bug记录与解决方法
Aug 15 Javascript
vue中v-for通过动态绑定class实现触发效果
Dec 06 Javascript
Js视频播放器插件Video.js使用方法详解
Feb 04 Javascript
Jquery使用each函数实现遍历及数组处理
Jul 14 jQuery
jQuery序列化表单成对象的简单实现
Nov 29 #Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
Nov 29 #Javascript
JS访问DOM节点方法详解
Nov 29 #Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
Nov 29 #Javascript
浅谈js函数的多种定义方法与区别
Nov 29 #Javascript
原生JS简单实现ajax的方法示例
Nov 29 #Javascript
jQuery Checkbox 全选 反选的简单实例
Nov 29 #Javascript
You might like
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
PHP中each与list用法分析
2016/01/08 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
JavaScript基本对象
2007/01/11 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
vue实现员工信息录入功能
2020/06/11 Javascript
python分割文件的常用方法
2014/11/01 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
Python lxml模块安装教程
2015/06/02 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python实现ATM系统
2020/02/17 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
什么是Python中的匿名函数
2020/06/02 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
函授毕业自我鉴定
2013/12/19 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
人力资源主管岗位职责
2014/01/29 职场文书
关于期中考试的反思
2014/02/02 职场文书
大学生励志演讲稿
2014/04/25 职场文书