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中的= =(等于)与= = =(全等于)区别
Apr 16 Javascript
基于JQuery 选择器使用说明介绍
Apr 18 Javascript
javascript如何动态加载表格与动态添加表格行
Nov 27 Javascript
jquery+css3打造一款ajax分页插件(自写)
Jun 18 Javascript
JavaScript中的条件判断语句使用详解
Jun 03 Javascript
JavaScript中用toString()方法返回时间为字符串
Jun 12 Javascript
不想让浏览器运行javascript脚本的方法
Nov 20 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
Aug 01 Javascript
Vue单页应用引用单独的样式文件的两种方式
Mar 30 Javascript
vue实现绑定事件的方法实例代码详解
Jun 20 Javascript
简单谈谈javascript高级特性
Sep 04 Javascript
vuejs实现下拉框菜单选择
Oct 23 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判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP实现微信退款功能
2018/10/02 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
深入理解Python中的super()方法
2017/11/20 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
高校毕业生登记表自我鉴定
2013/11/03 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
大学生暑假实习总结
2015/07/13 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
Java实现房屋出租系统详解
2021/10/05 Java/Android
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python