JS实现移动端图片延迟加载
图片延迟加载常见的有,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实现移动端图片延迟加载的更多相关文章
- js实现移动端图片预览:手势缩放, 手势拖动,双击放大...
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Js 之移动端图片上传插件mbUploadify
一.下载 https://pan.baidu.com/s/1NEL4tkHoK4ydqdMi_hgWcw 提取码:vx7e 二.Demo示例 <div class="weui_uplo ...
- 纯原生js移动端图片压缩上传插件
前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...
- 图片延迟加载(用jq自己写的方法)
$(function() { $("img.lazy").attr("src","2.jpg"); show(); $(window).sc ...
- 第一次自己写jquery图片延迟加载插件,不通用,但修改一下还是可以使用到很多页面上的
不断修改完善中…… /*! * jquery.lazyoading.js *自定义的页面图片延迟加载插件,比网上的jquery.lazyload简单,也更适合自己的网站 *使用方法: 把img 的cl ...
- Echo.js – 简单易用的 JavaScript 图片延迟加载插件
Echo.js 是一个独立的延迟加载图片的 JavaScript 插件.Echo.js 不依赖第三方库,压缩后不到1KB大小. 延迟加载是提高网页首屏显示速度的一种很有效的方法,当图片元素进入窗口可视 ...
- js图片延迟加载
什么是图片延迟加载? 也叫懒加载. 当页面有多屏的时候,页面中的图片比较多. 那么,在页面载入完毕的时候,并不会把所有的图片都加载进来. 而是当用户拖动滚动条的时候,图片要进入用户的视野了,才开始加载 ...
- 前端优化之图片延迟加载(lazyload.js)
要想缩短首屏加载时间,思路一般是减少http请求次数和降低每次的请求量.本文中使用现成的lazyload.js插件,文末会放出下载地址. lazyload.js可以实现图片分批次加载,不是一次性加载完 ...
- JS图片延迟加载分析及简单的demo
JS图片延迟加载 图片延迟加载也称 "懒加载",通常应用于图片比较多的网页,比如 "美丽说首页","蘑菇街"等一些导购网站上用的比较多,或者 ...
随机推荐
- ORACLE之ASM学习
ASM(Automatic Storage Management)是Oracle10g R2中为了简化Oracle数据库的管理而推出来的一项新功能,这是Oracle自己提供的卷管理器,主要用于替代操作 ...
- 个性二维码开源专题<替换元素点>
基础方法:ChangeFillShape //修改填充形状 ChangeFillShape(...) // 摘要: // 修改填充形状 // // 参数: // g: // 图形画板 // // Fo ...
- webpy使用笔记(一)
webpy入门 工作环境中需要经常生产和测试服务器,机房一直很混乱,因此萌生了开发一个简单方便的服务器管理系统(说的好高大上,其实就是个可以获取服务器信息的小web应用).之所以选择webpy,正式因 ...
- 【UML】类图的几种关系总结
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- C语言实现单链表-04版
前面的版本似乎没能让项目经理满意,他还希望这个链表有更多的功能: 我们接下来要解决几个比较简单的功能: Problem 1,更加友好的显示数据: 2,能够通过名字删除节点: Solution 首先我们 ...
- 【转】Oracle 执行动态语句
1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...
- bundle与package区别与联系
转:http://blog.csdn.net/lmbda/article/details/17895619 bundle是Apple提供的软件安装的便捷方法. bundle为用户和开发者提供了一个简单 ...
- unity 读取excel表 生成asset资源文件
做unity 项目也有一段时间了,从unity项目开发和学习中也遇到了很多坑,并且也从中学习到了很多曾经未接触的领域.项目中的很多功能模块,从今天开始把自己的思路和代码奉上给学渣们作为一份学习的资料. ...
- ArcGIS Flex API加载大量数据
1.关于大量数据的加载: 直接将所要展示的数据在服务器端发布成一个MapService,在客户端通过ArcGISDynamicMapServiceLayer来加载.这样的话客户端需要展示的仅仅是一张图 ...
- python一套完整的事务操作
#coding=utf-8 import sys import MySQLdb class TransferMoney(object): def __init__(self,conn): self.c ...