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 相关文章推荐
更优雅的事件触发兼容
Oct 24 Javascript
浅析jquery的作用与优势
Dec 02 Javascript
node.js超时timeout详解
Nov 26 Javascript
node.js中的path.basename方法使用说明
Dec 09 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 Javascript
Webpack中loader打包各种文件的方法实例
Sep 03 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
uin-app+mockjs实现本地数据模拟
Aug 26 Javascript
express异步函数异常捕获示例详解
Nov 30 Javascript
JavaScript异步操作中串行和并行
Nov 20 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简单判断手机设备的方法
2016/08/23 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
python获得图片base64编码示例
2014/01/16 Python
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python数据集切分实例
2018/12/08 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
python web框架中实现原生分页
2019/09/08 Python
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
《威尼斯的小艇》教学反思
2014/02/17 职场文书
中学教师师德承诺书
2014/05/23 职场文书
公司股东出资证明书
2014/11/01 职场文书
公务员年度个人总结
2015/02/12 职场文书
文明旅游倡议书
2015/04/28 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
高一作文之暖冬
2019/11/09 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python