javascript瀑布流式图片懒加载实例


Posted in Javascript onJune 28, 2020

最近项目使用到了“懒加载”,现在更新一般,因为平时主要使移动端的开发所以库文件使用的是zepto.js 。当然也可以和jQuery 通用。

代码如下:

/**
 * Created by zhiqiang on 2015/10/14.
 * hpuhouzhiqiang@gmail.com
 * 图片的懒加载
 **/
function loadImgLazy(node) {
 var lazyNode = $('[node-type=imglazy]', node),
 mobileHeight, lazyOffSetHeight, tempHeight, currentNodeTop, imgObject,
 imgDataSrc, localUrl;

 localUrl = location.href;
 // 获取当前浏览器可视区域的高度
 mobileHeight = $(window).height();

 return function(co) {

 var conf = {
 'loadfirst': true,
 'loadimg': true
 };

 for (var item in conf) {
 if (item in co) {
 conf[item] = co[item];
 }
 }

 var that = {};
 var _this = {};
 /**
 * [replaceImgSrc 动态替换节点中的src]
 * @param {[type]} tempObject [description]
 * @return {[type]} [description]
 */
 _this.replaceImgSrc = function(tempObject) {
 var srcValue;

 $.each(tempObject, function(i, item) {
 imgObject = $(item).find('img[data-lazysrc]');
 imgObject.each(function(i) {
  imgDataSrc = $(this).attr('data-lazysrc');
  srcValue = $(this).attr('src');
  if (srcValue == '#') {
  if (imgDataSrc) {
  $(this).attr('src', imgDataSrc);
  $(this).removeAttr('data-lazysrc');
  }
  }
 });
 });
 };

 /**
 * 首屏判断屏幕上是否出现imglazy节点,有的话就加载图片
 * @param {[type]} i) {  currentNodeTop [description]
 * @return {[type]} [description]
 */
 _this.loadFirstScreen = function() {
 if (conf.loadfirst) {
 lazyNode.each(function(i) {
  currentNodeTop = $(this).offset().top;
  if (currentNodeTop < mobileHeight + 800) {
  _this.replaceImgSrc($(this));
  }
 });
 }
 };

 //当加载过首屏以后按照队列加载图片
 _this.loadImg = function() {
 if (conf.loadimg) {
 $(window).on('scroll', function() {
  var imgLazyList = $('[node-type=imglazy]', node);
  for (var i = 0; i < 5; i++) {
  _this.replaceImgSrc(imgLazyList.eq(i));
  }
 });
 }
 };

 that = {
 replaceImgSrc: _this.replaceImgSrc(),
 mobileHeight: mobileHeight,
 objIsEmpty: function(obj) {
 for (var item in obj) {
  return false;
 }
 return true;
 },
 destory: function() {
 if (_this) {
  $.each(_this, function(i, item) {
  if (item && item.destory) {
  item.destory();
  }
  });
  _this = null;
 }
 $(window).off('scroll');
 }
 };
 return that;
 };
}

希望本文对大家学习javascript图片懒加载有所帮助。

Javascript 相关文章推荐
JavaScript 数组的 uniq 方法
Jan 23 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
Jun 08 Javascript
js Math 对象的方法
Sep 01 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
Javascript进制转换实例分析
May 14 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
Oct 27 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
Mar 15 Javascript
ES6新特性之Symbol类型用法分析
Mar 31 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
Vue 自定义动态组件实例详解
Mar 28 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
Bootstrap创建可折叠的组件
Feb 23 #Javascript
理解javascript定时器中的setTimeout与setInterval
Feb 23 #Javascript
Web开发必知Javascript技巧大全
Feb 23 #Javascript
JQUERY表单暂存功能插件分享
Feb 23 #Javascript
JavaScript简单实现鼠标移动切换图片的方法
Feb 23 #Javascript
jQuery实现返回顶部功能
Feb 23 #Javascript
JavaScript添加随滚动条滚动窗体的方法
Feb 23 #Javascript
You might like
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
调试php程序的简单步骤
2019/10/04 PHP
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
分析JS单线程异步io回调的特性
2017/12/01 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
浅析Git版本控制器使用
2017/12/10 Python
详解python3中tkinter知识点
2018/06/21 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
Python异常处理操作实例详解
2018/08/28 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
《大禹治水》教学反思
2014/04/27 职场文书
万里长城导游词
2015/01/30 职场文书
前台岗位职责范本
2015/04/16 职场文书
国家助学金受助感言
2015/08/01 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis