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 相关文章推荐
jquery BS,dialog控件自适应大小
Jul 06 Javascript
使用javascript过滤html的字符串(注释标记法)
Jul 08 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
Apr 08 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
Apr 27 Javascript
jQuery消息提示框插件Tipso
May 04 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
纯js实现瀑布流布局及ajax动态新增数据
Apr 07 Javascript
vue实现中部导航栏布局功能
Jul 30 Javascript
js回溯法计算最佳旅行线路代码实例
Sep 11 Javascript
JS中作用域以及变量范围分析
Jul 18 Javascript
javascript实现贪吃蛇游戏(娱乐版)
Aug 17 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隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
Python实现的端口扫描功能示例
2018/04/08 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
校庆标语集锦
2014/06/25 职场文书
见习报告格式要求
2014/11/04 职场文书
三峡人家导游词
2015/01/31 职场文书
毕业论文致谢范文
2015/05/14 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
python中if和elif的区别介绍
2021/11/07 Python
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL