原生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 - 如何引入js代码
Mar 09 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
Aug 10 Javascript
window resize和scroll事件的基本优化思路
Apr 29 Javascript
简述AngularJS的控制器的使用
Jun 16 Javascript
遍历json 对象的属性并且动态添加属性的实现
Dec 02 Javascript
详解Angular 4 表单快速入门
Jun 05 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
Dec 23 Javascript
Vue登录注册并保持登录状态的方法
Aug 17 Javascript
JS实现Cookie读、写、删除操作工具类示例
Aug 28 Javascript
vue插槽slot的理解和使用方法
Apr 03 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
May 05 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
php中spl_autoload详解
2014/10/17 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
Yii rules常用规则示例
2016/03/15 PHP
php异常处理捕获错误整理
2019/09/23 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
深入理解vue Render函数
2017/07/19 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
python for和else语句趣谈
2019/07/02 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
Python识别处理照片中的条形码
2020/11/16 Python
中学教师实习自我鉴定
2013/09/28 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
先进典型发言材料
2014/12/30 职场文书
社区宣传标语口号
2015/12/26 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript