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 相关文章推荐
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
js jquery获取随机生成id的服务器控件的三种方法
Jul 11 Javascript
js复制网页内容并兼容各主流浏览器的代码
Dec 17 Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
Angular2 父子组件数据通信实例
Jun 22 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
微信小程序下拉菜单效果的实例代码
May 14 Javascript
深入浅出vue图片路径的实现
Sep 04 Javascript
Vue-cli3多页面配置详解
Mar 22 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 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
session 的生命周期是多长
2006/10/09 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
python从子线程中获得返回值的方法
2019/01/30 Python
Python如何使用函数做字典的值
2019/11/30 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
结婚喜宴家长答谢词
2014/01/15 职场文书
社区健康教育实施方案
2014/03/18 职场文书
美容院经理岗位职责
2014/04/03 职场文书
公司年终奖分配方案
2014/06/16 职场文书
品牌转让协议书
2014/08/20 职场文书
个人委托函范文
2015/01/29 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
手残删除python之后的补救方法
2021/06/26 Python
SQL Server内存机制浅探
2022/04/06 SQL Server