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 相关文章推荐
精心挑选的15个jQuery下拉菜单制作教程
Jun 15 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
详解AngularJS实现表单验证
Dec 10 Javascript
jQuery css() 方法动态修改CSS属性
Sep 25 Javascript
js代码实现下拉菜单【推荐】
Dec 15 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
利用js实现前后台传送Json的示例代码
Mar 29 Javascript
Vue开发环境中修改端口号的实现方法
Aug 15 Javascript
vue 返回上一页,页面样式错乱的解决
Nov 14 Javascript
原生js+canvas实现下雪效果
Aug 02 Javascript
WebPack工具运行原理及入门教程
Dec 02 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
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
B2K与车机的中波PK
2021/03/02 无线电
PHP之数组学习
2011/05/29 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
Jquery iframe内部出滚动条
2010/02/11 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
用Python编写简单的微博爬虫
2016/03/04 Python
python实现图像识别功能
2018/01/29 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python实现定时提取实时日志程序
2018/06/22 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
使用python制作一个解压缩软件
2019/11/13 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
客户经理岗位职责
2013/12/08 职场文书
我的网上商城创业计划书
2013/12/26 职场文书
文明礼貌主题班会
2015/08/14 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python