原生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 相关文章推荐
js预载入和JavaScript Image()对象使用介绍
Aug 28 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
Mar 04 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
JavaScript 控制字体大小设置的方法
Nov 23 Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 Javascript
使用vue重构资讯页面的实例代码解析
Nov 26 Javascript
JS 5种遍历对象的方式
Jun 16 Javascript
jQuery实现评论模块
Aug 19 jQuery
vue中解决微信html5原生ios虚拟键返回不刷新问题
Oct 20 Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 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
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
前端性能优化建议
2020/09/17 Javascript
python创建和使用字典实例详解
2013/11/01 Python
Python 正则表达式(转义问题)
2014/12/15 Python
python构建深度神经网络(续)
2018/03/10 Python
Django发送邮件功能实例详解
2019/09/02 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
详解CSS3:overflow属性
2020/11/17 HTML / CSS
平面设计岗位职责
2013/12/14 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
服务员态度差检讨书
2014/10/28 职场文书
介绍信模板
2015/01/31 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
小学班主任自我评价
2015/03/11 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
mysql多表查询-笔记七
2021/04/05 MySQL
Python操作CSV格式文件的方法大全
2021/07/15 Python
python实现简单石头剪刀布游戏
2021/10/24 Python
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server
CSS的calc函数用法小结
2022/06/25 HTML / CSS