100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 利用CSS JavaScript及Ajax实现图片预加载办法

利用CSS JavaScript及Ajax实现图片预加载办法

时间:2018-11-18 23:49:49

相关推荐

利用CSS JavaScript及Ajax实现图片预加载办法

php教程|PHP开发

CSS JavaScript

php教程-PHP开发

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

9点网 源码,如何设置VScode,ubuntu julia,tomcat关闭很慢,sqlite建立表约束,discz插件,s2sh 前端框架,爬虫被封账号犯法吗,ios 上传图片php,罗源seo是什么,html相册网站源码,c sharp 开发网页,flash照片模板lzw

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

微信oa 源码下载,ubuntu定时重启每周,自制爬虫工具配方,请假网站php,1688 seo老师lzw

使用CSS

oracle jdbc驱动源码,vscode 如何放大字体,ubuntu锁ip,tomcat6.0密码,nodejs网络爬虫,php中的转义字符,嘉定区seo网络推广报价,助学网站模板lzw

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

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

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

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

使用CSS和JavaScript结合

functionpreload(){if(document.getElementById) {document.getElementById("div1").style.background ="url(/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg) no-repeat -9999px -9999px";document.getElementById("div2").style.background ="url(/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("/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg","/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg")

方法二

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

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

使用Ajax

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

window.onload =function(){setTimeout(function(){// XHR to request a JS and a CSSvarxhr =newXMLHttpRequest();xhr.open(GET,http://domain.tld/preload.js);xhr.send(\);xhr = newXMLHttpRequest();xhr.open(GET,http://domain.tld/preload.css);xhr.send(\);// preload imagenewImage().src ="http://domain.tld/preload.jpg";}, 1000);};

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

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

window.onload =function(){setTimeout(function(){// reference to varhead =document.getElementsByTagName(head)[0];// a new CSSvarcss =document.createElement(link);css.type = ext/css;css.rel = stylesheet;css.href = http://domain.tld/preload.css;// a new JSvarjs =document.createElement(script);js.type = ext/javascript;js.src = http://domain.tld/preload.js;// preload JS and CSShead.appendChild(css);head.appendChild(js);// preload imagenewImage().src =http://domain.tld/preload.jpg;}, 1000);};

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。