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

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

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

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

使用方法

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

或者

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

jQuery、Zepto:

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

20160122更新,添加jQuery、Zepto支持

/**
* lazy.js
* Version: 1.1
* 图片延迟加载
* Created by 赵小磊 on 2016/1/22.
*/ (function ($, window, document, undefined) {
var lazy = function (elem, options) {
var photos = typeof elem == "string" ? document.querySelectorAll(elem) : elem,
len = photos.length,
options = options || {},
size = options.size || ,
attr = options.attr || "data-original",
callback = options.callback || "",
page = ;
function loadPhoto() {
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop,
docHeight = document.body.scrollHeight,
winHeight = document.documentElement.clientHeight,
i = ,
sum = ;
if (scrollTop + winHeight >= docHeight - ) {
page++;
sum = size * page;
for (i; i < sum; i++) {
if (i < len) {
var photo = photos[i],
photoSrc = photo.getAttribute(attr);
if (photoSrc) {
photo.src = photoSrc;
photo.removeAttribute(attr);
if (i == sum - ) {
photo.onload = function () {
if (docHeight <= winHeight) {
loadPhoto();
}
}
}
if (callback && i == len - ) {
callback();
}
}
}
}
}
}
window.addEventListener("load", loadPhoto, false);
window.addEventListener("scroll", loadPhoto, false);
window.addEventListener("touchmove", loadPhoto, false);
};
window.lazy = lazy;
if (typeof $ != "undefined") {
$.fn.lazy = function(options) {
return lazy(this, options);
};
}
})(window.jQuery || window.Zepto, window, document);

2016/1/15上传1.0

/**
* lazy.js
* 图片延迟加载
* Created by 赵小磊 on 2016/1/15.
*/ (function (window, document) {
var lazy = function (elem, options) {
var photos = typeof elem == "string" ? document.querySelectorAll(elem) : elem,
len = photos.length,
options = options || {},
size = options.size || ,
attr = options.attr || "data-original",
callback = options.callback || "",
page = ;
function loadPhoto() {
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop,
docHeight = document.body.scrollHeight,
winHeight = document.documentElement.clientHeight,
i = ,
sum = ;
if (scrollTop + winHeight >= docHeight - ) {
page++;
sum = size * page;
for (i; i < sum; i++) {
if (i < len) {
var photo = photos[i],
photoSrc = photo.getAttribute(attr);
if (photoSrc) {
photo.src = photoSrc;
photo.removeAttribute(attr);
if (i == sum - ) {
photo.onload = function () {
if (docHeight <= winHeight) {
loadPhoto();
}
}
}
if (callback && i == len - ) {
callback();
}
}
}
}
}
}
window.addEventListener("load", loadPhoto, false);
window.addEventListener("scroll", loadPhoto, false);
window.addEventListener("touchmove", loadPhoto, false);
};
window.lazy = lazy;
})(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. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动

    当我们在流程里添加步骤时,有一些默认的步骤,像创建.更新.发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了. ...

  2. TypeScript开篇:尝点新鲜和甜头

    返回TS学习总目录 快速开始 我们通过创建一个简单的web应用来开始使用TypeScript.获得TS工具的方法主要有两种,一种是通过NPM(Node包管理器),另一种是通过VS2012安装TS的插件 ...

  3. C#修改文件权限

    用户名的格式为:Local MachineName\AccountName 机器名可通过System.Environment.MachineName获取. 获取一个文件的权限(帐号)列表 FileSe ...

  4. [JS11] 状态栏滚动

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. Ajax初步理解

    最近在项目中经常会使用Ajax技术,用法上倒是熟练了,但是只知其然,不知其所以然,抽时间读了读JavaScript高级程序设计中关于Ajax的介绍有了些初步的理解,在此总结一下. 什么是Ajax Aj ...

  6. Entity Framework后台采用分页方式取数据与AspNetPager控件的使用

    本文是一个对AspNetPager控件使用的笔记! 有关AspNetPager控件可以查看杨涛主页.这是一个开放的自定义ASP.NET控件,支持各种自定义的数据分页方式,使用很方便,而且功能也很强大, ...

  7. 股市T+0技巧

    虽然现在股票不能t+0交易了,不过通过股票t+0技巧可以变相的实现t+0交易,尤其在主力方面应用股票t+0技巧更为明显.主力资金一旦介入某股,肯定会建立很大的仓位作为主仓,然后长线持有.然而为了推动股 ...

  8. windows下安装mysql压缩包版[转]

    版本:5.6.17 1.将解压后的文件夹放到某个目录下,比如c:\software; 2.在环境变量中新建MYSQL_HOME=C:\software\mysql-5.6.17-winx64,然后在系 ...

  9. paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结

    paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结 一般的管理工具斗可以...就是要是sqlite没正常地关闭哈,有shm跟wal文件..例如ff的place.sqlit ...

  10. 文件系统:Ext3和Ext4

    一.ext3和ext4的区别: 1.与Ext3兼容:执行若干条命令,就能将Ext3在线迁移到Ext4,而无须重新格式化磁盘或者重新安装系统.原有Ext3数据结构照样保留, Ext4作用于新数据,当然, ...