首页 > js教程 > 正文

JS快速生成各种网格布局工具Grid介绍

原创 2018-01-13 17:20:18 0 11
这两天了解了一下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网格来说,它的代码就是:

let grid = new Grid({
container:document.getElementsByClassName('grid')[0],// 必须项
colCount:5,
rowCount:5,
width:600,
height:600,
});

如果你想给每个网格设置不同的样式,就是用对外API方法setGridStyleByIndex(); 同样拿效果图5X5网格来说,那五个对角线上网格就做了背景的样式设置,它们是通过如下代码完成的:

grid.setGridStyleByIndex(0, {"background": "red"});
grid.setGridStyleByIndex(6, {"background": "green"});
grid.setGridStyleByIndex(12, {"background": "yellow"});
grid.setGridStyleByIndex(18, {"background": "blue"});
grid.setGridStyleByIndex(24, {"background": "orange"});

还有一个问题是怎么拿每个子元素(小格子)的引用?通过对外API方法 getGrid(n)
还有一个问题是怎么拿所有子元素(小格子)的引用?通过对外API方法 getGrids()

let grids = grid.getGrids();
for(let i = 0; i < grids.length; i++){
grids[i].innerHTML = i + 1;
}

上面这段代码就是拿了所有小网格的引用,然后给网格填充文本内容的。示例中每个小格子的文本内容就是每个小格子在p列表中的索引+1。

Grid.js API

考虑到最核心的需求有两点,一个是较为简单地(至少和直接使用css同样方便)生成网格布局,第二是生成网格布局后拿到每个格子的引用,给格子添加内容。所以主要说这两方面。

传参生成网格实例

怎么生成不同的、规则的、不规则的网格实例,主要看new Grid(option)的时候你传的参数,提供可传的参数包括以下。

名称类型简介
containerhtmlDomElement父容器,必须项
rowCountnumber网格行数
colCountnumber网格列数
widthnumber、%父容器宽度
heightnumber、%父容器高度
pCountnumber实际格子的多少
gridAreaArray那些非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获取某个子网格

相关推荐:

CSS网格布局的示例代码

详解jQuery移动页面开发中的ui-grid网格布局使用_jquery

Grid布局方式的实例详解

以上就是JS快速生成各种网格布局工具Grid介绍的详细内容,更多请关注php中文网其它相关文章!

  • 相关标签:javascript 布局 网格
  • 本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!
  • 相关文章


  • 原生javascript实现分享到朋友圈功能 支持ios和android_javascript技巧
  • jQuery链式调用与show知识浅析_jquery
  • JS实现登录页面记住密码和enter键登录方法推荐_javascript技巧
  • BootstrapTable与KnockoutJS相结合实现增删改查功能【一】_javascript技巧
  • 网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
    独孤九贱(4)_PHP视频教程

    独孤九贱(4)_PHP视频教程

    江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

    独孤九贱(5)_ThinkPHP5视频教程

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

    独孤九贱(1)_HTML5视频教程

    独孤九贱(1)_HTML5视频教程

    《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

    ThinkPHP5实战之[教学管理系统]

    ThinkPHP5实战之[教学管理系统]

    本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    PHP入门视频教程之一周学会PHP

    PHP入门视频教程之一周学会PHP

    所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

    相关视频教程

  • javascript初级视频教程 javascript初级视频教程
  • jquery 基础视频教程 jquery 基础视频教程
  • javascript三级联动视频教程 javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程 独孤九贱(6)_jQuery视频教程
  • 相关视频章节