原生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 闭包深入理解(closure)
May 27 Javascript
javascript OFFICE控件测试代码
Dec 08 Javascript
javascript Array数组对象的扩展函数代码
May 22 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
Sep 17 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
Oct 12 Javascript
JS常用算法实现代码
Nov 14 Javascript
AngularJS变量及过滤器Filter用法分析
Nov 22 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
Vue加载组件、动态加载组件的几种方式
Aug 31 Javascript
vue.js 子组件无法获取父组件store值的解决方式
Nov 08 Javascript
封装 axios+promise通用请求函数操作
Aug 11 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
php后台程序与Javascript的两种交互方式
2009/10/25 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
python学生信息管理系统
2018/03/13 Python
python MySQLdb使用教程详解
2018/03/20 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
应届生护士求职信
2013/11/01 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
主持稿开场白
2015/06/01 职场文书