jquery实现图片预加载
使用jquery实现图片预加载提高页面加载速度和用户体,本就为大家详细分析jquery图片预加载的实现原理。
什么时候使用图片预加载?
如果页面使用了很多不是最初加载便可见的图片,有必要进行预加载:
$.preloadImages = function () { for (var i = 0; i < arguments.length; i++) { $('img').attr('src', arguments[i]); } }; $.preloadImages('img/hover-on.png', 'img/hover-off.png');
我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好。那么如何解决这个问题 呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图片的加载速度,这的确是个好方法,不过有时候我们也可以从前台找一些解决的 方法。下面我来介绍一种在实际应用中经常会使用到的js预加载的方法。
首先在输出图片的时候我们做一些处理<imgdata="这里是我们要显示图片的实际地址"src="这里是一张默认显示的小图片,可以快速加载到页面。可以是所有图片使用统一的图片也可以是要显示图片的缩略图"alt="图片名"/> 处理完html我们开始写js了,在这里我使用了jquery的类库。
$('img[data]').load(function(){ var __this__ = $(this); var url = __this__.attr('data'); var src = __this__.attr('src'); if(url ==''|| url == src)//这里判断如果图片实际地址不存在或者已经加载不处理 { return; } var img =newImage();//实例化一个图片的对象 img.src = url;//将要显示的图片加载进来 if(img.complete)//如果图片已经加载存在浏览器缓存中直接处理 { __this__.attr('src',url);//将要显示的图片替换过来 return; } img.onload =function(){//要显示的图片加载完成后做处理 __this__.attr('src',url); } });
实例讲解:Javascript,Jquery实现页面图片预加载百分比展现
如果需要在页面初始加载时显示加载进度。主要是指图片很多的情况下:
可以使用第三方Jquery插件jquery.imgpreload.min.js
调用里面的方法:imgpreload即可,实例如下:
var imgNum = 0; var images = []; $(function(){ preloadImg(); }); //里面有两种方式 function preLoadImg() { //第一种方式:通过dom方法获取页面中的所有img,包括<img>标签和css中的background-image /*get all imgs those tag is <img> var imgs = document.images; for (var i = 0; i < imgs.length; i++) { images.push(imgs[i].src); } //get all images in style var cssImages = getallBgimages(); for (var j = 0; j < cssImages.length; j++) { images.push(cssImages[j]); }*/ //第二种方式:把所有该网页上用到的图片文件都预先放入一个数组里 $.imgpreload(['images/bg1.jpg', 'images/bg2.jpg'], function () { //此处是显示进度百分比时需要用到的背景图,这个可以先加载进去 }); //then push all other images in array to load images.push("images/test_1.png"); images.push("images/test_2.png"); images.push("images/test_3.png"); //。。。 images.push("images/test_n.png"); /*这里是真正的图片预加载 preload*/ $.imgpreload(images, { each: function () { /*this will be called after each image loaded*/ var status = $(this).data('loaded') ? 'success' : 'error'; if (status == "success") { var v = (parseFloat(++imgNum) / images.length).toFixed(2); $("#percentShow").html(Math.round(v * 100) + "<sup>%</sup>"); } }, all: function () { /*this will be called after all images loaded*/ $("#percentShow ").html("100<sup>%</sup>"); $("percentShow").fadeOut(1000); $(".main").show(); } }); } //get all images in style(此方法引用其他博客的) function getallBgimages() { var url, B = [], A = document.getElementsByTagName('*'); A = B.slice.call(A, 0, A.length); while (A.length) { url = document.deepCss(A.shift(), 'background-image'); if (url) url = /url\(['"]?([^")]+)/.exec(url) || []; url = url[1]; if (url && B.indexOf(url) == -1) B[B.length] = url; } return B; } document.deepCss = function (who, css) { if (!who || !who.style) return ''; var sty = css.replace(/\-([a-z])/g, function (a, b) { return b.toUpperCase(); }); if (who.currentStyle) { return who.style[sty] || who.currentStyle[sty] || ''; } var dv = document.defaultView || window; return who.style[sty] || dv.getComputedStyle(who, "").getPropertyValue(css) || ''; } Array.prototype.indexOf = Array.prototype.indexOf || function (what, index) { index = index || 0; var L = this.length; while (index < L) { if (this[index] === what) return index; ++index; } return -1; }
这样就能在页面图片很多,且网速很慢的情况下给予用户一个百分比提示。
在做这个之前,由于每次本地测试加载都很快,百分比瞬间到100%然后消失,为了看上去有那么一回事,我还写了一个伪百分比进度条,仅供参考:
var t = window.setTimeout("preLoad()", 100); function preLoad() { $("#loading div").animate({ width: step + "px" }, 50).text(step + "%"); step += 1; if (step <= 100) { t = window.setTimeout("preLoad()", 100); } else { clearTimeout(t); $("#loading").fadeOut(1000); $("#preloadImg").fadeOut(1000); $(".main").show(); }
这是一个页面初始化完成之后,在页面上有一个模拟百分比不断增长的过程,到100%后消失进度条,显示主页面,不过跟实际页面加载没任何关系哦。
以上就是针对jquery图片预加载进行的详细学习,希望对大家的学习有所帮助。
相关文章
- 这篇文章主要介绍了jquery实现加载更多"转圈圈"效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-10
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
- 有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- 本文实例讲述了jQuery实现非常实用漂亮的select下拉菜单选择效果。分享给大家供大家参考,具体如下:先来看如下运行效果截图:在线演示地址如下:http://demo.jb51.net/js/2015/js-select-chose-style-menu-codes/具体代码如...2015-11-08
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- 本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
- 这篇文章主要为大家详细介绍了jQuery实现广告显示和隐藏动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-05
- JQuery使我们在开发Ajax应用程序的时候提高了效率,减少了许多兼容性问题,我们在Ajax项目中,遇到ajax异步获取数据出错怎么办,我们可以通过捕捉error事件来获取出错的信息。在没给大家介绍正文之前先给分享Jquery中AJAX参...2015-11-24
- 拜读一个开源框架,最想学到的就是设计的思想和实现的技巧。废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过,不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery又给扫一遍我也不会照本宣科的翻译...2014-05-31
- 当页面打开时我们需要执行一些操作,这个时候如果我们选择使用jquery的话,需要重写他的3中方法,自我感觉没什么区 别,看个人喜好了,第二种感觉比较简单明了: 第一种: 复制代码 代码如下: <script type="text/javas...2014-06-07
jQuery Mobile开发中日期插件Mobiscroll使用说明
这篇文章主要介绍了jQuery Mobile开发中日期插件Mobiscroll使用说明,需要的朋友可以参考下...2016-03-03jquery中常用的SET和GET$(”#msg”).html循环介绍
复制代码 代码如下: $(”#msg”).html(); //返回id为msg的元素节点的html内容。 $(”#msg”).html(”new content“); //将“new content” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content $(”...2013-10-13jQuery 1.9使用$.support替代$.browser的使用方法
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31- 这篇文章主要介绍了jQuery事件绑定用法,结合实例形式较为详细的分析了jQuery事件绑定的实现原理与相关注意事项,并附带了相关绑定方法的使用说明,重点介绍了bind和live的区别,需要的朋友可以参考下...2016-01-21
- jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
- 有时候我们为了省事就操作键盘组合键去代替使用鼠标,我们今天就使用JQuery实现Ctrl+Enter提交表单。我们发帖时,在内容输入框中输入完内容后,可以点击“提交”按钮来发表内容。可是,如果你够“懒”,你可以不用动鼠标,只需按...2015-10-23
- 在DOM操作中,常常需要动态创建HTML内容,使文档在浏览器里的呈现效果发生变化,并且达到各种各样的人机交互目的....2016-04-27
- 直接为大家介绍制作过程,希望大家可以喜欢。HTML结构该页面切换特效的HTML结构使用一个<main>元素来作为页面的包裹元素,div.cd-cover-layer用于制作页面切换时的遮罩层,div.cd-loading-bar是进行ajax加载时的loading进...2015-10-30