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 相关文章推荐
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
Javascript Throttle &amp; Debounce应用介绍
Mar 19 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
Oct 15 Javascript
js简单实现用户注册信息的校验代码
Nov 15 Javascript
深入理解JavaScript高级之词法作用域和作用域链
Dec 10 Javascript
js 高效去除数组重复元素示例代码
Dec 19 Javascript
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
Nov 13 Javascript
javascript获取网页宽高方法汇总
Jul 19 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
Oct 23 Javascript
JS实现的系统调色板完整实例
Dec 21 Javascript
clipboard在vue中的使用的方法示例
Oct 19 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分页显示制作详细讲解
2008/11/19 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
python网络编程示例(客户端与服务端)
2014/04/24 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
实习老师个人总结的自我评价
2013/09/28 职场文书
平面设计的岗位职责
2013/11/08 职场文书
会计专业毕业生自荐信范文
2013/12/20 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
地方课程教学计划
2015/01/19 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
关于python类SortedList详解
2021/09/04 Python
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏