图片延迟加载常见的有,jquery.lazyload.js,原生JS实现的echo.js。但是都是必须给图片设置宽高。

因为项目是移动端,而且无法在加载前知道图片的宽高,所以,只好自己写了一个。

既然无法按照高度来计算是否在可视区内加载。那我就按照个数加载,每次加载X张图片,滚动到底部的时候再加载X张。如果图片高度比较小,X张加载后图片没有满屏,那么就再执行一次加载。

Example:http://www.yc.cn/app/commonweal/

使用方法

  1. 原生JS
  1. var lazyPhoto = new lazy(".photo-list img");

或者

  1. var lazyPhoto = new lazy(".photo-list img", {
  2. size: ,
  3. attr: "data-original",
  4. callback: function () {
  5. //console.log("加载完了");
  6. }
  7. });

jQuery、Zepto:

  1. $(".photo-list img").lazy({
  2. size: ,
  3. attr: "data-original",
  4. callback: function () {
  5. //console.log("加载完了");
  6. }
  7. });

20160122更新,添加jQuery、Zepto支持

  1. /**
  2. * lazy.js
  3. * Version: 1.1
  4. * 图片延迟加载
  5. * Created by 赵小磊 on 2016/1/22.
  6. */
  7.  
  8. (function ($, window, document, undefined) {
  9. var lazy = function (elem, options) {
  10. var photos = typeof elem == "string" ? document.querySelectorAll(elem) : elem,
  11. len = photos.length,
  12. options = options || {},
  13. size = options.size || ,
  14. attr = options.attr || "data-original",
  15. callback = options.callback || "",
  16. page = ;
  17. function loadPhoto() {
  18. var scrollTop = document.body.scrollTop || document.documentElement.scrollTop,
  19. docHeight = document.body.scrollHeight,
  20. winHeight = document.documentElement.clientHeight,
  21. i = ,
  22. sum = ;
  23. if (scrollTop + winHeight >= docHeight - ) {
  24. page++;
  25. sum = size * page;
  26. for (i; i < sum; i++) {
  27. if (i < len) {
  28. var photo = photos[i],
  29. photoSrc = photo.getAttribute(attr);
  30. if (photoSrc) {
  31. photo.src = photoSrc;
  32. photo.removeAttribute(attr);
  33. if (i == sum - ) {
  34. photo.onload = function () {
  35. if (docHeight <= winHeight) {
  36. loadPhoto();
  37. }
  38. }
  39. }
  40. if (callback && i == len - ) {
  41. callback();
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }
  48. window.addEventListener("load", loadPhoto, false);
  49. window.addEventListener("scroll", loadPhoto, false);
  50. window.addEventListener("touchmove", loadPhoto, false);
  51. };
  52. window.lazy = lazy;
  53. if (typeof $ != "undefined") {
  54. $.fn.lazy = function(options) {
  55. return lazy(this, options);
  56. };
  57. }
  58. })(window.jQuery || window.Zepto, window, document);

2016/1/15上传1.0

  1. /**
  2. * lazy.js
  3. * 图片延迟加载
  4. * Created by 赵小磊 on 2016/1/15.
  5. */
  6.  
  7. (function (window, document) {
  8. var lazy = function (elem, options) {
  9. var photos = typeof elem == "string" ? document.querySelectorAll(elem) : elem,
  10. len = photos.length,
  11. options = options || {},
  12. size = options.size || ,
  13. attr = options.attr || "data-original",
  14. callback = options.callback || "",
  15. page = ;
  16. function loadPhoto() {
  17. var scrollTop = document.body.scrollTop || document.documentElement.scrollTop,
  18. docHeight = document.body.scrollHeight,
  19. winHeight = document.documentElement.clientHeight,
  20. i = ,
  21. sum = ;
  22. if (scrollTop + winHeight >= docHeight - ) {
  23. page++;
  24. sum = size * page;
  25. for (i; i < sum; i++) {
  26. if (i < len) {
  27. var photo = photos[i],
  28. photoSrc = photo.getAttribute(attr);
  29. if (photoSrc) {
  30. photo.src = photoSrc;
  31. photo.removeAttribute(attr);
  32. if (i == sum - ) {
  33. photo.onload = function () {
  34. if (docHeight <= winHeight) {
  35. loadPhoto();
  36. }
  37. }
  38. }
  39. if (callback && i == len - ) {
  40. callback();
  41. }
  42. }
  43. }
  44. }
  45. }
  46. }
  47. window.addEventListener("load", loadPhoto, false);
  48. window.addEventListener("scroll", loadPhoto, false);
  49. window.addEventListener("touchmove", loadPhoto, false);
  50. };
  51. window.lazy = lazy;
  52. })(window, document);

JS实现移动端图片延迟加载的更多相关文章

  1. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  2. Js 之移动端图片上传插件mbUploadify

    一.下载 https://pan.baidu.com/s/1NEL4tkHoK4ydqdMi_hgWcw 提取码:vx7e 二.Demo示例 <div class="weui_uplo ...

  3. 纯原生js移动端图片压缩上传插件

    前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...

  4. 图片延迟加载(用jq自己写的方法)

    $(function() { $("img.lazy").attr("src","2.jpg"); show(); $(window).sc ...

  5. 第一次自己写jquery图片延迟加载插件,不通用,但修改一下还是可以使用到很多页面上的

    不断修改完善中…… /*! * jquery.lazyoading.js *自定义的页面图片延迟加载插件,比网上的jquery.lazyload简单,也更适合自己的网站 *使用方法: 把img 的cl ...

  6. Echo.js – 简单易用的 JavaScript 图片延迟加载插件

    Echo.js 是一个独立的延迟加载图片的 JavaScript 插件.Echo.js 不依赖第三方库,压缩后不到1KB大小. 延迟加载是提高网页首屏显示速度的一种很有效的方法,当图片元素进入窗口可视 ...

  7. js图片延迟加载

    什么是图片延迟加载? 也叫懒加载. 当页面有多屏的时候,页面中的图片比较多. 那么,在页面载入完毕的时候,并不会把所有的图片都加载进来. 而是当用户拖动滚动条的时候,图片要进入用户的视野了,才开始加载 ...

  8. 前端优化之图片延迟加载(lazyload.js)

    要想缩短首屏加载时间,思路一般是减少http请求次数和降低每次的请求量.本文中使用现成的lazyload.js插件,文末会放出下载地址. lazyload.js可以实现图片分批次加载,不是一次性加载完 ...

  9. JS图片延迟加载分析及简单的demo

    JS图片延迟加载 图片延迟加载也称 "懒加载",通常应用于图片比较多的网页,比如 "美丽说首页","蘑菇街"等一些导购网站上用的比较多,或者 ...

随机推荐

  1. 解决阿里云SLB无法添加https证书的问题

    私钥是在Linux中通过下面的openssl命令生成的: openssl req -new -newkey rsa:2048 -nodes -keyout cnblogs.key -out cnblo ...

  2. 在Eclipse添加Android兼容包( v4、v7 appcompat )

    昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support ...

  3. [WinAPI] API 10 [创建、打开、读写文件,获取文件大小]

    在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等.读写文件最为直接的方式 ...

  4. [ACM_其他] Square Ice (poj1099 规律)

    Description Square Ice is a two-dimensional arrangement of water molecules H2O, with oxygen at the v ...

  5. 安全性之DDOS的防护技巧

    网站的信息安全越来越重要,结合自己1年多的互联网金融方面的安全防护做些总结. 后续希望研究并运用: 1.加密算法 2.DDOS的防护技巧 3.跨站点请求伪造 4.XSS攻击 5.文件上传漏洞 6.信息 ...

  6. AngularJS快速入门指南02:介绍

    AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...

  7. 【UML】类图的几种关系总结

    在UML类图中,常见的有以下几种关系:泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...

  8. asp.net core中Microsoft.AspNet.Session的使用

    1.通过nuget/修改project.json引用 2.引用存储session的媒介,如内存.数据库.redis等 "Microsoft.AspNetCore.Session": ...

  9. PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束

    PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束 ExecutorService并没有提供什么 isDone()或者isComplete()之类的方法. 作者Atti ...

  10. atitit.架构设计---方法调用结果使用异常还是返回值

    atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. jav ...