原生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 模式之工厂模式(Factory)应用介绍
Nov 15 Javascript
JavaScript 验证码的实例代码(附效果图)
Mar 22 Javascript
jquery获取子节点和父节点的示例代码
Sep 10 Javascript
javascript中传统事件与现代事件
Jun 23 Javascript
微信小程序 wx:for的使用实例详解
Apr 27 Javascript
你可能不知道的JSON.stringify()详解
Aug 17 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
Oct 12 Javascript
浅谈React中组件间抽象
Jan 27 Javascript
js实现动态改变radio状态的方法
Feb 28 Javascript
Vue动态创建注册component的实例代码
Jun 14 Javascript
js实现拖拽元素选择和删除
Aug 25 Javascript
vue基于Teleport实现Modal组件
May 31 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
python实现整数的二进制循环移位
2019/03/08 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
python代码xml转txt实例
2020/03/10 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
军训 自我鉴定
2014/02/03 职场文书
企业文化演讲稿
2014/05/20 职场文书
Python数据处理的三个实用技巧分享
2022/04/01 Python
Python实现视频自动打码的示例代码
2022/04/08 Python
Python序列化模块JSON与Pickle
2022/06/05 Python