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图片延迟加载 图片延迟加载也称 "懒加载",通常应用于图片比较多的网页,比如 "美丽说首页","蘑菇街"等一些导购网站上用的比较多,或者 ...
随机推荐
- 解决阿里云SLB无法添加https证书的问题
私钥是在Linux中通过下面的openssl命令生成的: openssl req -new -newkey rsa:2048 -nodes -keyout cnblogs.key -out cnblo ...
- 在Eclipse添加Android兼容包( v4、v7 appcompat )
昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support ...
- [WinAPI] API 10 [创建、打开、读写文件,获取文件大小]
在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等.读写文件最为直接的方式 ...
- [ACM_其他] Square Ice (poj1099 规律)
Description Square Ice is a two-dimensional arrangement of water molecules H2O, with oxygen at the v ...
- 安全性之DDOS的防护技巧
网站的信息安全越来越重要,结合自己1年多的互联网金融方面的安全防护做些总结. 后续希望研究并运用: 1.加密算法 2.DDOS的防护技巧 3.跨站点请求伪造 4.XSS攻击 5.文件上传漏洞 6.信息 ...
- AngularJS快速入门指南02:介绍
AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...
- 【UML】类图的几种关系总结
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- asp.net core中Microsoft.AspNet.Session的使用
1.通过nuget/修改project.json引用 2.引用存储session的媒介,如内存.数据库.redis等 "Microsoft.AspNetCore.Session": ...
- PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束 ExecutorService并没有提供什么 isDone()或者isComplete()之类的方法. 作者Atti ...
- atitit.架构设计---方法调用结果使用异常还是返回值
atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. jav ...