原生js实现移动端瀑布流式代码示例


Posted in Javascript onDecember 18, 2015

瀑布流布局已成为当今非常普遍的图片展示方式,无论是PC还是手机等移动设备上。最近使用到了“懒加载”,现在更新一般,因为平时主要使移动端的开发所以库文件使用的是zepto.js 。当然也可以和jQuery 通用。
代码如下:

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 相关文章推荐
jquery.validate分组验证代码
Mar 17 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
May 28 Javascript
ECMAScript6函数默认参数
Jun 12 Javascript
在vue.js中抽出公共代码的方法示例
Jun 08 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
Feb 22 Javascript
vue插槽slot的理解和使用方法
Apr 03 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
Apr 22 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 Javascript
React传值 组件传值 之间的关系详解
Aug 26 Javascript
Vue实现简易计算器
Feb 25 Javascript
浅谈vue中$bus的使用和涉及到的问题
Jul 28 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
jQuery Validate表单验证入门学习
Dec 18 #Javascript
jQuery定义插件的方法
Dec 18 #Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 #Javascript
jquery实现二级导航下拉菜单效果
Dec 18 #Javascript
学习jQuey中的return false
Dec 18 #Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 #Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 #Javascript
You might like
ie6 动态缩略图不显示的原因
2009/06/21 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
JS定时器实例详细分析
2013/10/11 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
最基础的Python的socket编程入门教程
2015/04/23 Python
python Django批量导入不重复数据
2016/03/25 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
Python中itertools的用法详解
2020/02/07 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
摄影助理岗位职责
2014/02/07 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
Redis高并发缓存架构性能优化
2022/05/15 Redis