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图片延迟加载 图片延迟加载也称 "懒加载",通常应用于图片比较多的网页,比如 "美丽说首页","蘑菇街"等一些导购网站上用的比较多,或者 ...
随机推荐
- jqPlot图表插件学习之饼状图和环状图
一.准备工作 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载对应的js和css(因为笔者在VS2 ...
- kali linux 系列教程之metasploit 连接postgresql可能遇见的问题
kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂 目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...
- 转 CSS hack:针对IE6,IE7,firefox显示不同效果
CSS hack:针对IE6,IE7,firefox显示不同效果 做网站时经常会用到,衡量一个DIV+CSS架构师的水平时,这个也很重要. 区别不同浏览器的CSS hack写法: 区别IE6与FF: ...
- C语言实现二叉树-01版
故事是这样开始的,项目经理有一天终于还是拍拍我肩膀说: 无论你的链表写得多么的好,无论是多么的灵活,我也得费老半天才查找到想要的数据: 这让我的工作非常苦恼,听说有一种叫做二叉树的数据结构,你看能不能 ...
- asp.net的JSON数据进行序列化和反序列化
先要引用在程序集 System.Web.Extensions.dll 的类库,在类中 using System.Web.Script.Serialization 命名空间. 1.定义一个强类型的类(m ...
- Leetcode 119 Pascal's Triangle II 数论递推
杨辉三角,这次要输出第rowIndex行 用滚动数组t进行递推 t[(i+1)%2][j] = t[i%2][j] + t[i%2][j - 1]; class Solution { public: ...
- 出现Bad command or the file name的原因
出现Bad command or file name的原因 中文释义:错误的命令或文件名 . 错误原因:不能识别输入的命令 . 方法:检查所输入的指令是否正确,包括拼写和大小写等情况.
- 使用Nginx负载均衡搭建高性能.NETweb应用程序一
一.遇到的问题 当我们用IIS服务器部署了一个web应用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接受到客户端请求的 时候,就会创建一个线程,当线程达到几千个 ...
- 在Flex (Flash)中嵌入HTML 代码或页面—Flex IFrame
在flex组件中嵌入html代码,可以利用flex iframe.这个在很多时候会用到的,有时候flex必须得这样做,如果你不这样做还真不行-- flex而且可以和html进行JavaScript交互 ...
- Android 代码混淆、第三方平台加固加密、渠道分发 完整教程(图文)
第一步:代码混淆(注意引入的第三方jar) 在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt. ...