原生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 相关文章推荐
VBScript版代码高亮
Jun 26 Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
Javascript 垃圾收集机制介绍理解
May 14 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
Dec 24 Javascript
js+canvas绘制矩形的方法
Jan 28 Javascript
对js中回调函数的一些看法
Aug 29 Javascript
jQuery基本过滤选择器用法示例
Sep 09 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
vue select二级联动第二级默认选中第一个option值的实例
Jan 10 Javascript
关于Vue项目跨平台运行问题的解决方法
Sep 18 Javascript
Vue实现简单的拖拽效果
Aug 25 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
咖啡与水的关系
2021/03/03 冲泡冲煮
PHP中如何调用webservice的实例参考
2013/04/25 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
javascript实现二叉树遍历的代码
2017/06/08 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
浅析python递归函数和河内塔问题
2017/04/18 Python
答题辅助python代码实现
2018/01/16 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
python安装twisted的问题解析
2018/08/21 Python
python中cPickle类使用方法详解
2018/08/27 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
python代码中怎么换行
2020/06/17 Python
Python 如何展开嵌套的序列
2020/08/01 Python
python关于倒排列的知识点总结
2020/10/13 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
汽车专业学生自我评价
2014/01/19 职场文书
八年级语文教学反思
2014/02/11 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
新闻人物通讯稿
2014/10/09 职场文书
2014年党小组工作总结
2014/12/20 职场文书
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python