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 相关文章推荐
一个简单的Ext.XTemplate的实例代码
Mar 18 Javascript
通过javascript获取iframe里的值示例代码
Jun 24 Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 Javascript
javascript中的return和闭包函数浅析
Jun 06 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
js分页工具实例
Jan 28 Javascript
谈谈对offsetleft兼容性的理解
Nov 11 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
Nov 18 Javascript
各种选择框jQuery的选中方法(实例讲解)
Jun 27 jQuery
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 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 mssql 时间格式问题
2009/01/13 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
Python实现截屏的函数
2015/07/25 Python
深入讲解Python编程中的字符串
2015/10/14 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
pandas apply多线程实现代码
2020/08/17 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
邹越演讲观后感
2015/06/15 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript