前端页面优化:javascript图片延迟加载
自己写了个简单的图片延迟加载小插件。 功能如下: 页面刷新,当前屏幕图片直接加载真实地址,body被卷去的部分和下方未显示的部分的img均加载通用图片如:loding.gif 随着屏幕上下滚动加载相应在窗口显示的img真实地址。
此处做了一个简单优化,因为延迟加载是计算每个图片距离顶部的距离然后循环赋值的,我在这里给每个图片定义一个flag标记,如果为false,循环时直接continue。这里还可以直接将图片真实地址赋值的img直接从数组中删除,两种写法从代码的臃肿性和执行的流畅性上尚未做对比。 最后附上简单的使用方法。 下面看插件源码:
| 0 | var loding = function(elm){ |
| 1 | |
| 2 | elm = elm instanceof Array ? elm : [elm]; |
| 3 | |
| 4 | var i = 0, |
| 5 | imgArr = []; |
| 6 | |
| 7 | for(i; i < elm.length; i += 1){ |
| 8 | |
| 9 | everyBox(elm[i]); |
| 10 | |
| 11 | } |
| 12 | |
| 13 | //给每个盒子进行遍历 |
| 14 | function everyBox(box){ |
| 15 | |
| 16 | var imgs = document.getElementsByTagName('img'); |
| 17 | |
| 18 | //遍历每个图片数组 |
| 19 | for(var i = 0; i < imgs.length; i += 1){ |
| 20 | |
| 21 | everyImg(imgs[i]); |
| 22 | |
| 23 | } |
| 24 | |
| 25 | } |
| 26 | |
| 27 | function everyImg(img){ |
| 28 | |
| 29 | var temp = document.body.scrollTop || document.documentElement.scrollTop, |
| 30 | windowH = window.innerHeight; |
| 31 | |
| 32 | img.temp = img.offsetTop; |
| 33 | |
| 34 | img.tempB = img.offsetTop + img.offsetHeight; |
| 35 | |
| 36 | if(img.attributes['data-src']){ |
| 37 | |
| 38 | img.ok = img.attributes['data-src'].nodeValue; |
| 39 | |
| 40 | img.flag = true; |
| 41 | |
| 42 | } |
| 43 | |
| 44 | if(img.flag == true){ |
| 45 | |
| 46 | if(img.temp < temp + windowH && img.tempB > temp){ |
| 47 | |
| 48 | img.src = img.ok; |
| 49 | |
| 50 | img.flag = false; |
| 51 | |
| 52 | } |
| 53 | |
| 54 | imgArr.push(img); |
| 55 | |
| 56 | } |
| 57 | |
| 58 | } |
| 59 | |
| 60 | window.onscroll = function(){ |
| 61 | |
| 62 | var temp = document.body.scrollTop || document.documentElement.scrollTop, |
| 63 | i = 0, |
| 64 | windowH = window.innerHeight; |
| 65 | |
| 66 | for(i; i < imgArr.length; i += 1){ |
| 67 | |
| 68 | if(imgArr[i].flag){ |
| 69 | |
| 70 | if(imgArr[i].temp < temp + windowH && imgArr[i].tempB > temp){ |
| 71 | |
| 72 | imgArr[i].src = imgArr[i].ok; |
| 73 | |
| 74 | imgArr[i].flag = false; |
| 75 | |
| 76 | } |
| 77 | |
| 78 | }else{ |
| 79 | |
| 80 | continue; |
| 81 | |
| 82 | } |
| 83 | |
| 84 | } |
| 85 | |
| 86 | |
| 87 | } |
| 88 | |
| 89 | }; |
插件使用方法,在head内引入loding.js 所有需要使用延迟加载的图片请按如下格式编写 <img src="通用图片地址" data-src="真实图片地址"> 调用方法: loading(elm || [elm,elm,elm]); 传入原生dom对象或dom对象数组均可。 插件会直接获取盒子内符合条件的img图片绑定延迟加载 延迟加载在线运行地址
前端页面优化:javascript图片延迟加载的更多相关文章
- Echo.js – 简单易用的 JavaScript 图片延迟加载插件
Echo.js 是一个独立的延迟加载图片的 JavaScript 插件.Echo.js 不依赖第三方库,压缩后不到1KB大小. 延迟加载是提高网页首屏显示速度的一种很有效的方法,当图片元素进入窗口可视 ...
- web前端页面优化——个人见解
web前端页面优化,我们从JavaScript.css.html这3个方面说下,我的见解,希望大神们能有刚好优化方法,一起探讨. 一. 有关javascript方面 优化见解. 1. 首先举个例子: ...
- 前端优化之图片延迟加载(lazyload.js)
要想缩短首屏加载时间,思路一般是减少http请求次数和降低每次的请求量.本文中使用现成的lazyload.js插件,文末会放出下载地址. lazyload.js可以实现图片分批次加载,不是一次性加载完 ...
- Web前端性能优化之图片优化
我自己的Blog:http://blog.cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到了互联网内容总量的62%,也就是说超过 ...
- 前端性能优化JavaScript篇
关于前端性能优化的讨论一直都很多,包罗的知识也很多,可以说性能优化只有更好,没有最好.前面我写了一篇关于css优化的总结文章,今天再从javascript方面聊一聊. 1.从资源加载方面来说,浏览器的 ...
- javascript图片延迟加载(转载)
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...
- 【前端优化】图片延迟加载Lazy-loading的原理与简单实现
1.什么是lazy-loading 图片"懒加载" 为img标签src设置统一的图片链接,而将真实链接地址装在自定义属性中. 所以开始时候图片是不会加载的,我们将满足条件的图片的s ...
- Web性能优化之图片延迟加载
来源:微信公众号CodeL 对于一些图片多,页面长的网页来说,如果每次打开页面加载全部的网页内容,页面加载速度势必会受到影响,如果每次打开网页只将网页可视区域的内容加载给用户 ,将大大提高网页浏览速度 ...
- 简单的Javascript图片延迟加载库Echo.js
简介: 和 Lazy Load 一样,Echo.js 也是一个用于图像延迟加载 JavaScript.不同的是 Lazy Load 是基于 jQuery 的插件,而 Echo.js 不依赖于 jQue ...
随机推荐
- [置顶] ※数据结构※→☆非线性结构(tree)☆============树结点 链式存储结构(tree node list)(十四)
结点: 包括一个数据元素及若干个指向其它子树的分支:例如,A,B,C,D等. 在数据结构的图形表示中,对于数据集合中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,简称结点. 在C语言 ...
- 问题解决——Group Box控件遮挡其它控件
转载请保持文章的完整性并显要地注明出处 本文链接:http://blog.csdn.net/wlsgzl/article/details/38042301 ====================== ...
- 新手求大神,有其他swit-case的思路写这个程序么?
两个程序: switch-case与if-else if的区别相同点:可以实现多分支结构;不同点:switch:一般只能用于等值比较.(可以进行范围运算???---学会用switch计算范围出炉的思路 ...
- python heapq
这个模块(build-in)实现了一个堆的数据结构,完美的解决了Top-K问题,以后解决Top-K问题的时候,直接把这个模块拿来用就可以了 注意,默认的heap是一个小顶堆! heapq模块提供了如下 ...
- Java学习之System.arraycopy()方法
java.lang.System的静态方法arraycopy()可以实现数组的复制,讲课的老师说这个方法效率比较高,如果数组有成千上万个元素,那么用这个方法,比用for语句循环快不少.System提供 ...
- The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the arguments (int, SettingFragment, String)
The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the ...
- 如何寻找java的安装路径问题
关于不知道JAVA安装在linux的哪 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans ...
- Jdbc初体验
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...
- 【grunt整合版】学会使用grunt打包前端代码
grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学, ...
- sql语句操作记录
发觉一些sql语句写出来的时候不停忘记,做一个记录. mySQL .查看表的创建过程sql语句和注释,注释是在创建表的过程中增加comment,后面跟随注释的内容 SHOW CRATE TABLE T ...