这两天了解了一下css的grid布局,发现确实很好用。看了几篇博客,了解了它的几个常用属性后,可以快速生成一个网格布局。相较于传统的float、定位等显得更成体系,更规范,不Grid.js是一个使用JavaScript动态创建规则网格布局、非规则网格布局的模块。FE可以通过new Grird(option)创建一个Grid实例, 该实例的UI就呈现为css grid布局。需要一些hack做法。
虽然grid布局已经很好,前端工程师中有一些更多是喜欢通过动态创建p,使用js给p加样式这种方式来完成自己的工作的。
同样是出于使用JavaScript动态生成grid布局的需要,诞生了Grid.js这个小工具。
效果图
先来几张使用Grid.js生成的效果图吧。
以下四张效果图父容器的大小都是600*600像素。
第一张是一个4X4的网格,其中有3个网格是非原子大小(1X1)的,即2X2, 2X2, 2X1。
第二张是一个5X5的规则网格,所谓规则网格就是所有子元素都是1X1的大小。
第三张是一个6X5的网格,其中有5个非原子大小的网格。
第四张是一个7X7的网格,其中有4个非原子大小的网格。
Grid.js使用
Grid.js使用es6 class语法完成,所以使用方式很简单。
通过new Grid(option)即可生成一个网格实例。就以效果图第二张图生成的5X5网格来说,它的代码就是:
<span style="font-size: 14px;">let grid = new Grid({<br> container:document.getElementsByClassName('grid')[0],// 必须项<br> colCount:5,<br> rowCount:5,<br> width:600,<br> height:600,<br> });<br></span>
如果你想给每个网格设置不同的样式,就是用对外API方法setGridStyleByIndex(); 同样拿效果图5X5网格来说,那五个对角线上网格就做了背景的样式设置,它们是通过如下代码完成的:
<span style="font-size: 14px;">grid.setGridStyleByIndex(0, {"background": "red"});<br>grid.setGridStyleByIndex(6, {"background": "green"});<br>grid.setGridStyleByIndex(12, {"background": "yellow"});<br>grid.setGridStyleByIndex(18, {"background": "blue"});<br>grid.setGridStyleByIndex(24, {"background": "orange"});<br></span>
还有一个问题是怎么拿每个子元素(小格子)的引用?通过对外API方法 getGrid(n)。
还有一个问题是怎么拿所有子元素(小格子)的引用?通过对外API方法 getGrids()。
<span style="font-size: 14px;">let grids = grid.getGrids();<br>for(let i = 0; i < grids.length; i++){<br> grids[i].innerHTML = i + 1;<br>}<br></span>
上面这段代码就是拿了所有小网格的引用,然后给网格填充文本内容的。示例中每个小格子的文本内容就是每个小格子在p列表中的索引+1。
Grid.js API
考虑到最核心的需求有两点,一个是较为简单地(至少和直接使用css同样方便)生成网格布局,第二是生成网格布局后拿到每个格子的引用,给格子添加内容。所以主要说这两方面。
传参生成网格实例
怎么生成不同的、规则的、不规则的网格实例,主要看new Grid(option)的时候你传的参数,提供可传的参数包括以下。
名称 | 类型 | 简介 |
---|---|---|
container | htmlDomElement | 父容器,必须项 |
rowCount | number | 网格行数 |
colCount | number | 网格列数 |
width | number、% | 父容器宽度 |
height | number、% | 父容器高度 |
pCount | number | 实际格子的多少 |
gridArea | Array | 那些非1X1格子的占位表示 |
关于pCount和gridArea数组的说明:
这两个参数用来生成不规则网格布局,所以是本模块的关键。否则,你就只能用本模块生成n*m的规则网格了。
我们拿第一张效果图4X4网格举例,本来如果不是1、2、3那三个网格有跨行、跨列的行为,就不需要传pCount,也不用传gridArea,模块会为你生成4X4=16个一模一样的格子。但是由于这三个较大网格存在,所以,这个父容器是容不下16个子元素的,所以,你传的pCount是什么呢,是在存在非1X1子网格的情况下,父容器正好填满时,子网格的数量,因此就是9.。一般在你拿到设计图的时候,你就知道这个布局了,子网格数目很好算(因为实际场景也不需要创建好几十乘以好几十那么琐碎的格子)。
针对这三个非1X1的子网格,我们需要为其每一个传一个数组,来表示这个子网格是在父网格的第几行开始、第几列开始、跨几行、跨几列。即每个非1X1的子网格,都要传一个length为4的数组。然后把这些数组再放到一个外包数组里面,这个外包数组就是gridArea。
对于效果图1,gridArea = [[1,1,2,2],[2,3,2,2],[4,1,1,2]]。
整个4X4网格共有3个非1X1大小的子网格。
其中[1,1,2,2]就说明这个4X4的网格中有一个从第一行第一列开始,跨行跨列都为2的子网格。
API接口
目前暴露的API
名称 | 参数类型 | 简介 |
---|---|---|
setGridStyleByIndex(n,style) | number,obj | 设置小格子样式,第一个参数是小格子索引;style是对象,举例style={"color":"red"} |
getGrids() | 无 | 获取所有子网格p引用 |
getGrid(n) | number | 获取某个子网格 |
相关推荐:
详解jQuery移动页面开发中的ui-grid网格布局使用_jquery
以上是JS快速生成各种网格布局工具Grid介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载
最流行的的开源编辑器