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 相关文章推荐
学习ExtJS table布局
Oct 08 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
Dec 09 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
Jun 26 Javascript
node.js中的querystring.escape方法使用说明
Dec 10 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
vue axios 表单提交上传图片的实例
Mar 16 Javascript
vue中使用element-ui进行表单验证的实例代码
Jun 22 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
为什么node.js不适合大型项目
Apr 28 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 过滤器实现代码
2010/08/09 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
php计算一个文件大小的方法
2015/03/30 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
javascript操作符&quot;!~&quot;详解
2015/02/10 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
js获取Get值的方法
2016/09/29 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
layui的select联动实现代码
2019/09/28 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python连接DB2数据库
2016/08/27 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
年度献血先进个人事迹材料
2014/02/14 职场文书
2014年财务部工作总结
2014/11/11 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android