原生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 相关文章推荐
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
Jul 21 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
javascript数组操作方法小结和3个属性详细介绍
Jul 05 Javascript
显示今天的日期js代码(阳历和农历)
Sep 30 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
jQueryUI中的datepicker使用方法详解
May 25 Javascript
JavaScript核心语法总结(推荐)
Jun 02 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
Aug 25 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 Javascript
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
收集的DedeCMS一些使用经验
2007/03/17 PHP
mysql 全文搜索 技巧
2007/04/27 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
教师党的群众路线学习心得体会
2014/11/04 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
会议欢迎词范文
2015/01/27 职场文书
商务英语求职信范文
2015/03/19 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
公司车辆管理制度
2015/08/04 职场文书
学校运动会开幕词
2016/03/03 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js