首页 / VUE / Vue木桶布局的实现方法(附代码)
Vue木桶布局的实现方法(附代码)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Vue木桶布局的实现方法(附代码),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2461字,纯文字阅读大概需要4分钟。
内容图文
本篇文章给大家带来的内容是关于Vue木桶布局的实现方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。公司最近在重构,使用的是Vue框架。涉及到一个品牌的布局,因为品牌的字符长度不一致,所以导致每一个的品牌标签长短不一。多行布局下就会导致每行的品牌布局参差不齐,严重影响美观。于是就有了本篇的木桶布局插件。
木桶布局的实现是这样分步骤的:
1、首先对要填放的内容进行排序,筛选出每一行的元素。
2、再对每一行元素进行修整,使其美观对齐。
分步骤
一、根据需要选出每行的元素
首先获取我们需要的元素、和我们目标容器的宽度。
Vue组件容器:
<template> <div ref="barrel"> <slot></slot> </div> </template>
二、再者我们需要获取容器和容器宽度
this.barrelBox = this.$refs.barrel; this.barrelWidth = this.barrelBox.offsetWidth;
三、接着循环我们的元素,根据不同的元素的宽度进行分组。
ps:对于元素的宽度获取的时候我们需要对盒模型进行区分。
Array.prototype.forEach.call(items, (item) => { paddingRight = 0; paddingLeft = 0; marginLeft = parseInt(window.getComputedStyle(item, "").getPropertyValue('margin-left')); marginRight = parseInt(window.getComputedStyle(item, "").getPropertyValue('margin-right')); let boxSizing = window.getComputedStyle(item, "").getPropertyValue('box-sizing'); if (boxSizing !== 'border-box') { paddingRight = parseInt(window.getComputedStyle(item, "").getPropertyValue('padding-right')); paddingLeft = parseInt(window.getComputedStyle(item, "").getPropertyValue('padding-left')); } widths = item.offsetWidth + marginLeft + marginRight + 1; item.realWidth = item.offsetWidth - paddingLeft - paddingRight + 1; let tempWidth = rowWidth + widths; if (tempWidth > barrelWidth) { dealWidth(rowList, rowWidth, barrelWidth); rowList = [item]; rowWidth = widths; } else { rowWidth = tempWidth; rowList.push(item); } })
四、接着是对每一组的元素进行合理分配。
const dealWidth = (items, width, maxWidth) => { let remain = maxWidth - width; let num = items.length; let remains = remain % num; let residue = Math.floor(remain / num); items.forEach((item, index) => { if (index === num - 1) { item.style.width = item.realWidth + residue + remains + 'px'; } else { item.style.width = item.realWidth + residue + 'px'; } }) }
我这边是采用的平均分配的方式将多余的宽度平均分配到每一个元素里。如一行中全部元素占800px,有8个元素,该行总长为960px。则每行增加的宽度为(960-800)/8=16,每个与元素宽度增加16px;
值得注意的是,js在获取元素宽度的时候会存在精度问题,所以需要进行预设一个像素进行缓冲。
我的代码地址:Github:vue-barrel;npm: vue-barrel
以上就是Vue木桶布局的实现方法(附代码)的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的Vue木桶布局的实现方法(附代码)全部内容,希望文章能够帮你解决Vue木桶布局的实现方法(附代码)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。