jQuery图片瀑布流的简单实现代码


Posted in Javascript onMarch 15, 2017

简单版的Jquery实现图片瀑布流思路,供大家参考,具体内容如下

注意:本篇文章基于知道每张图片的实际尺寸的情况下
特点:列数自适应,图片宽度固定

已知BUG:

像本案例中的刚好5张图片循环显示且只有5列的情况下会有问题,解决办法就是给予样式的时候不按顺序,而是先将图片放在top值最低的列

1.预备

1.基础html

<div id="main">
  <div class="img-item"><img src="images/img1.png" data-size="398*636" alt=""></div>
  <div class="img-item"><img src="images/img2.png" data-size="560*381" alt=""></div>
  <div class="img-item"><img src="images/img3.png" data-size="338*537" alt=""></div>
  <div class="img-item"><img src="images/img4.png" data-size="599*507" alt=""></div>
  <div class="img-item"><img src="images/img5.png" data-size="532*535" alt=""></div>
</div>

新建html文件,然后将#main下一层的代码多拷贝几次,毕竟图片多才能体现瀑布流的作用

2.基础css

#main{
  width: 90%;
  background-color: #dab;
  text-align: center;
  margin:0 auto;
  position: relative;
}
img{
  width: 100%;
  box-sizing:border-box;
  box-shadow: 2px 0 3px #ddd,0 2px 3px #ddd;
}
.img-item{
  position: absolute;
  padding: 3px;
  box-sizing:border-box;
  height: auto;
  display: inline-block;
}

2.开始

1.声明

//获取图片列表包裹层
var $main = $('#main');
//获取窗口,用于自适应
var $mainWidth = $(window).width();
//定义图片宽度
var imgWidth = 150;
//可显示的列数
var columnNumber = Math.floor($mainWidth/imgWidth);
//存储top信息
var data = [];
//初始化,比如当前可以显示6列,那么这里就初始化6个空间
for (var i = 0; i < columnNumber; i++) {
  data[i] = 0;
}

2.主体

//
var wall = function() {
  //获取相册图片集合
  var $imgs = $('.img-item');
  //遍历图片集合修改top值
  $.each($imgs, function(index, el) {
    //计算当前列数
    var currColumn = index % columnNumber;

    //获取需要显示的高度
    var size = $('img', el).data('size');
    var height = imgWidth / parseInt(size.split('*')[0]) * parseInt(size.split('*')[1])

    $(el).css({
      width: imgWidth,
      left: currColumn * imgWidth,
      top: data[currColumn]
    });

    //如果需要动画可以使用$(el).animate
    data[currColumn] += height;
    //本来这里只需要+=$(el).height()就可以解决,但是初始化时有些问题未解决
  });
};

3.窗体大小改变事件

$(window).resize(function(event) {
   //重置窗口宽度
   $mainWidth = $(window).width();
   //重置可显示的列数
   columnNumber = Math.floor($mainWidth / imgWidth);
   //动态修改#main相册包裹层的宽度,使整个相册看起来一直居中
   $main.css({
     width: imgWidth * columnNumber
   });
   //重置top信息
   for (var i = 0; i < columnNumber; i++) {
     data[i] = 0;
   }
   wall();
 });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 继承机制的实现
Aug 12 Javascript
Javascript继承机制的设计思想分享
Aug 28 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
Nov 27 Javascript
js中function()使用方法
Dec 24 Javascript
Javascript页面跳转常见实现方式汇总
Nov 28 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
JS生成某个范围的随机数【四种情况详解】
Apr 20 Javascript
javascript中活灵活现的Array对象详解
Nov 30 Javascript
使用selenium抓取淘宝的商品信息实例
Feb 06 Javascript
vuejs点击class变化的实例
Sep 05 Javascript
对angularJs中ng-style动态改变样式的实例讲解
Sep 30 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 #Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 #Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 #Javascript
jQuery动态产生select option下拉列表
Mar 15 #Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
Mar 15 #Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
Mar 15 #Javascript
jQuery实现移动端Tab选项卡效果
Mar 15 #Javascript
You might like
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
试用php中oci8扩展
2015/06/18 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
Puppeteer使用示例详解
2019/06/20 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Python和Sublime整合过程图示
2019/12/25 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
活动总结模板
2014/05/09 职场文书
市场策划求职信
2014/08/07 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书