js 实现waterfall

引用:https://github.com/Krryxa/krry_wallpaper

代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Img js</title><style>.masonry {width: 100%;position: relative;}.item {z-index: 10;transition: .25s;overflow: hidden;position: absolute;}.item img {width: 100%;height: 100%;transition: .25s;}.item:hover img {z-index: 100;transition: .25s;overflow: hidden;animation: bounceIn .25s ease-in 2 alternate;}@keyframes bounceIn {100% {transform: scale(1.07);}}</style></head><body><div class="masonry"><div class="item"><img class="lazy" src="/img/769df24a75dc4146.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/8f8cbf44b7f2f750.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/92094defb368e7f2.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/c2b843b414977435.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/c6e846a3390ce300.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/640e766c7c6499f2.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/3f05c95d3e4c4cc0.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/de9b8d90895134da.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/ac1025432d967024.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/306818e65b4f1410.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/d36357ab0ae5dd5e.jpg" alt=""></div><div class="item"><img class="lazy" src="/img/d360438a93cf93cb.jpg" alt=""></div></div><script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script><script>//瀑布流效果//这里有一个坑(已经修复)://因为是动态加载远程图片,在未加载完全无法获取图片宽高//未加载完全就无法设定每一个item(包裹图片)的top。//item的top值:第一行:top为0//            其他行:必须算出图片宽度在item宽度的缩小比例,与获取的图片高度相乘,从而获得item的高度//                   就可以设置每张图片在瀑布流中每块item的top值(每一行中最小的item高度,数组查找)//item的left值:第一行:按照每块item的宽度值*块数//             其他行:与自身上面一块的left值相等function waterFall() {// 1- 确定图片的宽度 - 滚动条宽度var pageWidth = getClient().width - 8;var columns = 3; //3列var itemWidth = parseInt(pageWidth / columns); //得到item的宽度$(".item").width(itemWidth); //设置到item的宽度var arr = [];$(".masonry .item").each(function (i) {var height = $(this).find("img").height();var width = $(this).find("img").width();var bi = itemWidth / width; //获取缩小的比值var boxheight = parseInt(height * bi); //图片的高度*比值 = item的高度if (i < columns) {// 2- 确定第一行$(this).css({top: 0,left: (itemWidth) * i});arr.push(boxheight);} else {// 其他行// 3- 找到数组中最小高度  和 它的索引var minHeight = arr[0];var index = 0;for (var j = 0; j < arr.length; j++) {if (minHeight > arr[j]) {minHeight = arr[j];index = j;}}// 4- 设置下一行的第一个盒子位置// top值就是最小列的高度 $(this).css({top: arr[index],left: $(".masonry .item").eq(index).css("left")});// 5- 修改最小列的高度 // 最小列的高度 = 当前自己的高度 + 拼接过来的高度arr[index] = arr[index] + boxheight;}});}//clientWidth 处理兼容性function getClient() {return {width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight}}// 页面尺寸改变时实时触发window.onresize = function () {//重新定义瀑布流waterFall();};//初始化window.onload = function () {//实现瀑布流waterFall();}</script>
</body></html>

效果格式(图片来自引用文章):

至此,结束。

JS实现waterfall相关推荐

  1. js:nodejs通过async异步提交事务数据

    一,async异步编程 1,异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数.ajax请求等等 waterfall ...

  2. 瀑布流布局(原生js,jQuery实现)

    项目地址: 瀑布流布局实战 阅读人群: 懂html,css,js,jquery的coder 阅读时间: 60minutes 1. 瀑布流式布局简介 什么是瀑布流布局 一种网站页面布局,视觉表现为参差不 ...

  3. vue 实现瀑布流布局的 组件/插件总汇:vue-waterfall、vue-waterfall-easy、vue-virtual-collection、vue-grid-layout

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 瀑布流作为当前比较流行的一种网页布局方式,在视觉上呈现出参差不齐.琳琅满目.唯美的视觉效果,该布局随 ...

  4. 前端系列之jQuery(jQuery瀑布流布局)

    瀑布流简介 瀑布流--瀑布流式布局 一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 最早采用此布局的网站是Pinterest,逐渐 ...

  5. AJAX——瀑布流布局

    瀑布流案例 封装jQuery瀑布流插件 //特点分析: //1. 跟以前的瀑布流不一样的是,这次的瀑布流固定版心为1200px //2. 瀑布流固定摆放5列,每一列的宽度固定为232px.//思路分析 ...

  6. html瀑布流布局layui,瀑布流插件jquery.waterfall.js 的使用

    美腿图库,冲!冲!冲 $(function() { $('#div1 a').lightBox(); }); .jq22-container { margin-top: 50px; } #div1 { ...

  7. 一篇文章带你搞懂JS对象的自我销毁

    在日常的JS组件开发中,往往会有一些较为复杂的DOM操作及事件监听,尤其是在处理UI层面的widgets时候更为明显.常常会花很多精力在对象的init上,而当组件需要被移除时则仅仅是把所在DOM草草的 ...

  8. 【转】Node.js最新Web技术栈(2015年5月)

    nodejs是比较简单的,只有你有前端js基础,那就按照我的办法来吧!一周足矣 推荐技术栈 express 4.x (express最新版本,初学者先别去碰koa) mongoose(mongodb) ...

  9. 做出的一个图片的自动展示效果(JS版本)

    在国外的网站看到一个很不错的图片自动展示效果,于是就自己做了起来,在查看代码时发现是一个JavaScript爱好者自己写了一个库文件来调用,确实看的不太懂,但效果是做出来了,页面的调用代码只需引用固定 ...

  10. 【转】关于WaterFall瀑布流式布局的性能优化

    市面上已存在的瀑布流式布局的网站: 拼范网:http://www.pinfun.com/ 迷尚网:http://www.mishang.com/ 凡客达人:http://star.vancl.com/ ...

最新文章

  1. nyoj11-奇偶数分离
  2. (转) 淘淘商城系列——Redis五种数据类型介绍
  3. 微软 .net 你更新这么快IDE vs2015 、语法糖 6.0、framework、‘吹得这么牛,然并用...
  4. Xen的起源与工作原理
  5. 怎么用计算机算账单,电脑如何快速调出计算器
  6. UE4 Hello Slate
  7. android系统如何自适应屏幕大小
  8. 新型智慧城市城市大脑大数据平台顶层设计规划建设方案
  9. 翻书法记忆GRE词汇
  10. 史上最好用的Mysql历史数据归档工具
  11. 麒麟Linux启动目录,优麒麟目录结构介绍 系统入门必备
  12. RMS (Rights Management Services)基于SDK2.1的二次开发环境搭建
  13. 苹果怎么锁定计算机,苹果电脑如何锁定屏幕-mac锁定屏幕教程 - 河东软件园
  14. HDU 5855 Less Time, More profit(最大权闭合图)
  15. 三维模型楼盘展示的功能及优点
  16. 面包板如何接线电源 图解_消防应急照明EPS应急电源供电系统如何设计?附高清接线参考图...
  17. python之list与tuple
  18. html怎么让页面没有滑动条,html不显示滚动条并可以滚动
  19. 成人高考计算机基础知识真题,江苏省2019年成人高考大学计算机基础统考样卷...
  20. Win10系统安装VUE及环境配置解析

热门文章

  1. 我是如何一步步获取房东的WiFi后台管理密码的【社工思路】
  2. 158、如何分辨出一台PoE交换机是否标准PoE供电
  3. R语言使用dplyr包进行数据聚合统计计算滑动窗口统计值(Window Statistics)、计算滑动分组四分位差(IQR、四分位距)并合并生成的统计数据到原数据集中
  4. Android系统篇(一)——建立Android系统开发环境
  5. 王垠:完全用Linux工作 (转载)
  6. 投票丨鹿晗关晓彤曝光恋情 是如何搞垮新浪服务器的
  7. 【计几】二维计算几何基础
  8. Windows窗口编程之计算机,WindowsAPI窗口程序设计.docx
  9. 零基础该怎么去学游戏建模?
  10. panic: reflect: reflect.Value.SetUint using value obtained using unexported field(go语言)