原生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 相关文章推荐
firefox插件Firebug的使用教程
Jan 02 Javascript
JavaScript的parseInt 取整使用
May 09 Javascript
javascript 动态创建表格
Jan 08 Javascript
javascript中一些util方法汇总
Jun 10 Javascript
Webpack 实现 AngularJS 的延迟加载
Mar 02 Javascript
Bootstrap实现下拉菜单效果
Apr 29 Javascript
jquery实现下拉框功能效果【实例代码】
May 06 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
详解Vuex中mapState的具体用法
Sep 28 Javascript
Vue 实现手动刷新组件的方法
Feb 19 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 Javascript
JS操作json对象key、value的常用方法分析
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
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
php 上传功能实例代码
2010/04/13 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
layui实现数据分页功能
2019/07/27 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python代码实现KNN算法
2017/12/20 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
简单了解python反射机制的一些知识
2019/07/13 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
python异常处理和日志处理方式
2019/12/24 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
python实现猜数游戏
2020/03/27 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
护理专业大学生自我推荐信
2014/01/25 职场文书
欢迎家长标语
2014/10/08 职场文书
检讨书格式
2015/01/23 职场文书
主题班会开场白
2015/06/01 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL