自适应浮动表单填充布局脚本

效果

1、适合搜素表单布局,查询重置等功能块始终位于最后一行的最后一列
在这里插入图片描述

2、适合普通多行两端对齐,未填充满的行左对齐
在这里插入图片描述

思路

  1. 此脚本目的为实现整齐风格的表单布局,为了达到整齐的效果,每个表单元素或者块都要设置一致的 宽度
  2. flex 布局不能适应多行不同的对齐需求,grid需要额外配置不同分辨率的分割,此脚本只需要设置块宽以及块的默认最小间隔(指效果图中灰色块,脚本中定义为box
  3. 通过已知的块宽和最小间隔能够计算出一行最多可容纳多少块,如果宽度富裕则计算出新的间隔
  4. 浮点运算的不准确,需要计算正数插值,将其平摊到具有右边距 的每个块

代码

此版本为jquery版,不过只是借用了其事件触发功能用以适应屏幕缩放,其他功能性脚本均为原生js,可以很容易转为其他框架比如vue

需要注意的是,所有的块默认为float:left

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><style>div {box-sizing: border-box;}.fit-box {border: 1px solid #aaa;}.fit-box:after {content: '';display: block;clear: both}.box {float: left;/*默认左浮动,必须*/width: 121px;height: 40px;margin-top: 10px;background: #c8c8c8;/*border: 1px solid #72b48b;*/}</style>
</head>
<body>
<!--div.fill-box*5>{$}-->
<div class="fit-box"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box">7</div><div class="box">8</div><div class="box">9</div><div class="box">10</div><div class="box">11</div><div class="box">12</div><div class="box">13</div><div class="box">14</div><div class="box">15</div>
</div>
<script src="../../lib/jquery-1.11.3.min.js"></script>
<script>;(function () {function DriftBox($el, options) {this._$el = $el;this._options = $.extend({}, options);}DriftBox.prototype = {init() {let _this = this;let { _$el, _options } = _this//初始化时执行一次计算_this.calculate();//监听窗口变动_$el.on('RZ', (e) => {((fn, params, time) => {//如果当前存在延时,则清除并重新添加,注意保持method对象的稳定性,不然可能导致tId丢失clearTimeout(fn.tId);fn.tId = setTimeout(() => fn.call(_this, params), time)})(_this.calculate, e, _options.throttleTime)});$(window).resize(() => _$el.trigger($.Event('RZ')));},/*** FillBox宽度固定,需要计算每行数量,边距**/calculate() {let { searchLayout: isSearchLayout, marginRight: mr, boxSelector } = this._optionslet el = this._$el[0]let boxArr = el.querySelectorAll(boxSelector); //获取所有BOXlet boxNum = boxArr.length;if (boxNum) {let rw = el.clientWidth,//行宽bw = boxArr[0].offsetWidth, //TODO 只考虑BOX同宽,BOX不同宽易导致自动分配的margin过大且需要传送式计算每行BOX数量num = Math.floor((rw + mr) / (bw + mr)), //每行最多几个BOxrowNum = Math.ceil(boxNum / num);//分几行if (num) {mr = Math.floor((rw - num * bw) / (num - 1));console.log("num:", num, 'rw:', rw, 'bw:', bw, 'mr:', mr)//满行最后一个BOX不设置margin-right;boxArr.forEach((d, i) => d.style.marginRight = (i + 1) % num && mr + 'px');//如果是类似表单查询的布局,查询和重置|按钮所在box需要右对齐if (isSearchLayout) {boxArr[boxNum - 1].style.marginRight = 0boxArr[boxNum - 1].style.float = 'right'}//浮点计算的不准确可能导致每行差几个像素,在视觉上不会太明显,默认将这些插值添加到每行的第一个非右对齐的元素let dif = rw - num * bw - (num - 1) * mr//处理每行的差值let box, marginRight, i, j, m;for (i = 0; i < rowNum; i++) {for (j = 0, m = 0; j < dif; m++) {box = boxArr[i * num + m % num]marginRight = parseInt(box.style.marginRight)if (box.style.float == 'right') breakif (marginRight) {box.style.marginRight = marginRight + 1 + 'px'j++}}}console.log('dif:', dif, 'rowNum:', rowNum)}/*** 如果容器高度过大导致外层出现滚动条压缩压缩容器宽度,会使得计算的margin偏小,* 因此需要在计算完成后重新进行比对,如果容器宽度变化则重新计算一次*/requestAnimationFrame(() => rw != el.clientWidth ? this.calculate() : '')}}}$.fn.DriftBox = function (options) {this.each(function (index, el) {new DriftBox($(el), options).init()});return $(this)}
})();$('.fit-box').DriftBox({boxSelector: '.box',searchLayout: false,throttleTime: 150,marginRight: 20,//假如指定盒子最小边距为20像素
});</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矩阵字符串配置任意合并表格布局

效果 核心 布局配置矩阵&#xff08;以下为多个模式),可以使用|或\n表示矩阵行 const gridArr [1,2,a,b 3,4,a,b 5,6,a,b ,1,2 3,4 5,6 ,1,2,3,4 3,4]任意横向或者纵向相同的字符表示一个合并块 使用 <CalcTable grid"1,2,a,b|3,4,a,b|5,6,a,b" ><span…

bsc是指什么_为什么KPI令人厌恶?中小企业不要乱用KPI!

私信小编“绩效”两字&#xff0c;免费发送60分钟薪酬绩效管理内部培训视频。导读现在很多的企业都会对员工做一些绩效考核&#xff0c;大多数还是采用KPI的方式。但是员工对KPI的考核越来越反感&#xff0c;甚至出现抵触的情况。为什么会出现这种想象呢&#xff1f;其实很简单…

解决微信小程序 [Component] slot ““ is not found.

解决方式 当使用自定义组件或者slot标签作为组件A的插槽内容时&#xff0c;在组件A中必须定义一个默认插槽&#xff0c;对普通view等标签无限制。且因为wx:if为false的插槽等同没有定义 场景复现&#xff08;仅以自己遇到情况为例&#xff09; 1、调试基础库2.19.4 2、使用w…

列表排序应用FLIP动画(vue)

效果 原理详解 链接 1.beforeUpdate 获取first 变化前位置 (以id建立map映射) 2.updated 获取变化后位置 last 3.禁用transition并transform元素回初始位置 4.异步恢复transition 并取消 transform 代码 <template><div ref"container"><div style&…

面试项目亮点_码农:面试被问到自己项目亮点时,感觉自己的回答虚伪的不行!...

据我个人观察&#xff0c;大多数程序员都对自己现有的项目有吐糟的习惯&#xff0c;比如吐糟代码逻辑混乱&#xff0c;代码规范问题&#xff0c;代码可读性差&#xff0c;代码没有注释&#xff0c;没有文档&#xff0c;代码极度冗余等等&#xff0c;总之满眼看到的都是一些缺陷…

微信小程序 仿 SwipeCell 的滑动单元格 SwipeBox

效果 代码 页面 调用Page <block wx:for"{{4}}" wx:key"{{item}}"><view style"text-align:center;padding:20px"><swipe-box><view slot"left" style"">左侧内容</view><view class&q…

u852日期限制解决补丁_《赛博朋克》1.06补丁出炉:进一步提升主机版本稳定性...

《赛博朋克2077》虽说是出师不利&#xff0c;但是开发商CDPR承诺自己会持续优化这款“尚待打磨”的作品&#xff0c;这种态度还是要稍微肯定一下的。我们看到之前CDPR就已经推送了1.05补丁&#xff0c;修复了大量的BUG以及问题&#xff0c;并且以游戏主机的BUG修复为重点&#…

微信小程序原生横向步骤条steps

效果 代码 调用 <rug-step options"{{steps}}" active"{{stepActive}}"></rug-step>steps: [{ label: 步骤1 },{ label: 步骤步骤步骤步骤2 },{ label: 步骤3 },{ label: 步骤步骤步骤步骤步骤4 },{ label: 步骤4 },{ label: 步骤4 },{ label…

华为云 手机 电脑登录不了怎么办 账户_华为云手机能解决芯片困难,是否真的实在,来西瓜视频找答案...

最近&#xff0c;网上到处流传着华为发布鲲鹏云手机的信息&#xff0c;有人说这个云手机能化解华为眼下的芯片燃眉之急的样子。事实真的如此吗?小编最近关注到&#xff0c;华为的鲲鹏云手机又成为大家关注和谈论的热点&#xff0c;甚至还有人说&#xff0c;华为有了云手机&…

单选复选状态控制类

场景 不同的平台写基础组件&#xff0c;写累了&#xff0c;对于单选复选这种逻辑闭合的组件&#xff0c;javascript 控制脚本是可以完全独立出来的&#xff0c;仅对外暴露状态即可根据不同的平台和环境进行视图的渲染 效果 使用 初始化 let selector new Selector({key: va…

康普顿效应是弹性碰撞吗_如何正确解读物理实验结果系列之十二——康普顿效应与光子...

作者&#xff1a;彭晓韬日期&#xff1a;2020年01月10日[文章摘要]&#xff1a;康普顿效应和光电效应一样&#xff0c;被广泛认定为支持光为光子的重要证据之一。但光电效应因无法解释紫限&#xff08;高于一定频率的光也不能产生光电效应&#xff09;现象而倍受质疑。同样地&a…

前端 滑动拼图校验 纯js组合式调用

前端 滑动拼图校验 纯js组合式调用效果思路代码效果 思路 独立滑块和拼图&#xff0c;通过实例方法组合使用,滑块和拼图均通过指定元素容器加载内容通过canvas 路径切片 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF…

前端处理取消选择文件动作

背景 项目中用到各种选择文件&#xff0c;且有很大一部分操作几乎相同&#xff0c;想要尽可能的简化选择上传文件的步骤&#xff0c;因此选择脚本生成 <input type"file"/> 标签的形式完成函数式的上传文件调用&#xff0c;但是如果打开了文件管理器但是并未选…

methods vue过滤器 和_数据动态过滤技巧在 Vue 项目中的实践

这个问题是在下在做一个 Vue 项目中遇到的实际场景&#xff0c;这里记录一下我遇到问题之后的思考和最后怎么解决的(老年程序员记性不好 -。-)&#xff0c;过程中会涉及到一些Vue源码的概念比如 $mount、 render watcher等&#xff0c;如果不太了解的话可以瞅瞅 Vue源码阅读系列…

两条边延长角会有什么变化_田园易经:什么样的风水环境会影响人的健康?

“气之聚&#xff0c;有水以界之&#xff0c;无风以散之。皆言风与水&#xff0c;故谓之风水”这是古人对于风水的解释。风水&#xff0c;其实是《伏羲先天六十四卦方圆图》中的一个卦&#xff0c;西晋的郭璞&#xff0c;第一次把它单独提出来&#xff0c;风水是65涣卦&#xf…

afm原子力分析软件_牛津仪器发布全新大样品原子力显微镜Jupiter XR

2月27日&#xff0c;牛津仪器Asylum Research宣布推出新型原子力显微镜(AFM)——Jupiter XR™ AFM&#xff0c;这是一款能够利用单一扫描器同时提供全自动、多功能、高扫描速度和高精度的大样品AFM。全新大样品原子力显微镜Jupiter XR™ AFMJupiter XR™提供超过210 mm的样品空…

东方卫视收视率查询_肖战被嘲撑不起跨年收视率,看了东方卫视收视曲线,这锅不背!...

每当跨年晚会的时候&#xff0c;各大地方台就会拿出看家本领&#xff0c;都想在新年的最后一天一举夺魁。往年湖南卫视一直独占鳌头&#xff0c;今年东方卫视的阵容也很值得看一看。黄景瑜迪丽热巴、肖战杨紫&#xff0c;两对顶流cp同台演出&#xff0c;这么强大的阵容足以和其…

三运放差分放大电路分析_信号源内阻对差动放大电路共模抑制比的影响分析与改善方法...

点击蓝字关注我们《差动放大电路中电阻误差对电路共模抑制比的影响与蒙特卡洛分析》一文&#xff0c;介绍在差动放大电路设计时匹配电阻精度造成的影响&#xff0c;而在差动放大电路应用中还有一个不可忽略的因素——信号源内阻。本篇对信号源内阻在差动放大电路的共模抑制比影…

计算机网络学习笔记(一)——分层模型、协议、服务、连接模式、标准化组织

文章目录前言概念一、两种参考模型二、协议和实体三、封装和解封四、服务&#xff08;接口、SAP、原语&#xff09;五、面向连接和面向无连接六、虚通信与透明通信七、标准和标准化组织八、服务模式参考资料前言 笔者系电子科技大学2019级在读本科生&#xff0c;针对本学期学校…