JavaScript实现瀑布流图片效果


Posted in Javascript onJune 30, 2017

本文实例为大家分享了js实现瀑布流图片效果的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
  <style type="text/css">
    *{
      margin: 0;
      padding: 0;
    }
    #wrap{
      position: relative;
      list-style: none;
      margin: 0 auto;
    }
    #wrap li{
      width: 200px;
      font-size: 1.5rem;
      position: absolute;
      background-color: #CCCCCC;
      -webkit-transition: all 2s;
    }
    #wrap li div{
      width: 100%;
      height: 100%;
      overflow: hidden;
    }
  </style>
</head>
<body>
<ul id="wrap"></ul>
</body>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
function randomFunction(max , min){
  return parseInt(Math.random() * (max - min)) + min;
}
var wrapUL = document.getElementById("wrap");
var width = 200;
var rightPadding = 10;
var hs = [];
var num = 0;
function setLiPos(bol){
  var lis = wrapUL.getElementsByTagName("li");
  var windowBody = document.documentElement.clientWidth;
  var cols = parseInt(windowBody / width);
  wrapUL.style.width = cols * (width + rightPadding) + "px";
  var arrT = [];
  for (var i = 0; i < cols; i++) {
    arrT[i] = 0;
  }
  function createLi(index){
    var li = lis[index]||document.createElement("li");
     
    var h = hs[index] || randomFunction(100, 300);
    li.style.height = h + "px";
    if(bol){
      hs.push(h);
    }
    var min = arrT[0];
    var minIndex = 0;
    for (var i = 0; i < arrT.length; i++) {
      if(min > arrT[i]){
        min = arrT[i];
        minIndex = i;
      }
    }
    li.style.top = arrT[minIndex] + "px";
    li.style.left = minIndex * (width + rightPadding) + "px"; arrT[minIndex] += (h + rightPadding);
    bol&&wrapUL.appendChild(li);
  }
  for(var i = 0; i < 20; i++){
    if(bol){
      num++;
    }
    createLi(i);
  }
}
setLiPos(true);
window.onresize = function(){
  setLiPos(false);
}
});
</script>
<script type="text/javascript">
$(function(){
  var imgArr = ["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg"];
  $("li").each(function(index, el) {
    var n = RandomNumBoth(0,imgArr.length-1);
    var imgsrc = imgArr[n];
    $(this).html("<div><img onload='loadImage()' src='"+imgsrc+"'></div>");
  });
});
function loadImage(){
  $("img").each(function(index, el) {
    var a=$(this).width(),
    b=$(this).height(),
    pa = $(this).parent().width(),
    pb = $(this).parent().height(),
    e=a/b, //图片宽高比 3
    pe=pa/pb; //承载图片容器宽高比 
    if(e>=pe){
      $(this).css({height:"100%",width:"auto"});
      var imgW = $(this).width(),
      iW = $(this).parent().width(),
      w = -(imgW - iW)/2;
      $(this).css('marginLeft',w);
    }else{
      $(this).css({width:"100%",height:"auto"});
      var imgH = $(this).height(),
      iH = $(this).parent().height(),
      h = -(imgH - iH)/2;
      $(this).css('marginTop',h);
    }
  });
}
function RandomNumBoth(Min,Max){
   var Range = Max - Min;
   var Rand = Math.random();
   var num = Min + Math.round(Rand * Range);
   return num;
}
</script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype PeriodicalExecuter对象 学习
Jul 19 Javascript
jquery下实现overlay遮罩层代码
Aug 25 Javascript
手把手教你自己写一个js表单验证框架的方法
Sep 14 Javascript
超越Jquery_01_isPlainObject分析与重构
Oct 20 Javascript
再次分享18个非常棒的jQuery表格插件
Apr 10 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
谈谈javascript中使用连等赋值操作带来的问题
Nov 26 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 Javascript
完全深入学习Bootstrap表单
Nov 28 Javascript
js的新生代垃圾回收知识点总结
Aug 22 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
Jun 30 #Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 #Javascript
jQuery表单设置值的方法
Jun 30 #jQuery
JavaScript注册时密码强度校验代码
Jun 30 #Javascript
Bootstrap Table从零开始
Jun 30 #Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 #Javascript
常见的浏览器Hack技巧整理
Jun 29 #Javascript
You might like
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
PHP内置加密函数详解
2016/11/20 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Python time库基本使用方法分析
2019/12/13 Python
python实现ftp文件传输功能
2020/03/20 Python
重构Python代码的六个实例
2020/11/25 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
监理资料员岗位职责
2014/01/03 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
运动会广播稿100字
2015/08/19 职场文书
科级干部培训心得体会
2016/01/06 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
ipad隐藏软件app图标方法
2022/04/19 数码科技