(原始内容存档于2018-09-21). greatstack.js
方便移动的现代Typescript库,用于仪表板布局和创建. 制作一个拖放,多栏响应的仪表板从来就没有那么容易了. 具有多种绑定功能, 并与之配合良好 角质 (包括), 反应, (中文(简体) ), 阴道, (中文(简体) ), 击倒. js, (中文(简体) ), 琥珀 和其他事项(见 框架 页:1.
受到无长者维持的克格勒斯特的启发,用爱来建造.
检查 http://gridstackjs.com (中文(简体) ) 财务报告和审定财务报表 这些演示。 。 。 .
如果你觉得这个乐章有用,请捐赠 付费页 (使用时 “交给朋友” 避免收取3%的费用)或 温莫 帮助支持它!
加入我们的Slack: https://gridstackjs.slack.com (中文(简体) )
目录 生成方式 DocTOC 文档
Demo 和 API 文档
请访问 http://gridstackjs.com (中文(简体) ) 财务报告和审定财务报表 这些演示,则完成 API 文档
使用量
安装
yarn add gridstack
// or
npm install --save gridstack
包含
ES6 或打字符
import 'gridstack/dist/gridstack.min.css';
import { GridStack } from 'gridstack';
或者( 单个合并文件, 注意 - all.js) html
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
<script src="node_modules/gridstack/dist/gridstack-all.js"></script>
说明: IE支持在v2中被放弃,但在v4.4中被外部贡献者恢复(我对测试+支持的过时浏览器没有兴趣,因此这在未来可能再次被打破). 您可以使用 es5 文件和多填充( 更大的) 来代替旧浏览器 。 例如:
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
<script src="node_modules/gridstack/dist/es5/gridstack-poly.js"></script>
<script src="node_modules/gridstack/dist/es5/gridstack-all.js"></script>
基本用途
动态创建项目...
// ...in your HTML
<div class="grid-stack"></div>
// ...in your script
var grid = GridStack.init();
grid.addWidget({w: 2, content: 'item 1'});
...或从列表创建
// using serialize data instead of .addWidget()
const serializedData = [
{x: 0, y: 0, w: 2, h: 2},
{x: 2, y: 3, w: 3, content: 'item 2'},
{x: 1, y: 3}
];
grid.load(serializedData);
... 或 DOM 创建项目
// ...in your HTML
<div class="grid-stack">
<div class="grid-stack-item">
<div class="grid-stack-item-content">Item 1</div>
</div>
<div class="grid-stack-item" gs-w="2">
<div class="grid-stack-item-content">Item 2 wider</div>
</div>
</div>
// ...in your script
GridStack.init();
...或见所有列表 API 和选项 可用.
见 jsfile 样本 作为运行中的例子.
所需资源
GridStack到v1时不再需要外部依赖(lodash被去掉v0.5和jquery API被去掉v1). v3 是一个完整的 HTML5 重写去除 jquery 的需要. v6是本地鼠标和触摸事件,用于移动支持,不再有jquery-ui版本. 你现在只需要包括 gridstack-all.js 财务报告和审定财务报表 gridstack.min.css (使用基于%的 CSS 栏进行排出).
具体框架
搜索 国家防范机制下的"gridstack" 最近,还有更多...
- 角质:我们现在用Angular包装器组件从盒子中运出 - 看 角构件。 。 。 .
- 角点9数字 : 电网 注:非常古老的 v. 3 格栅实例 只有您想要使用指令时,才会使用代码 未通风 当我使用组件.
- 角 JS 语言数字 : 网格正方形
- 琥珀数字 : 电源网
- 淘汰: 见 演示 使用组件,但检查 定制绑定票 这可能是更好的方法.
- 铁路数字 : 电网-js-铁路
- 反应: 见 演示 与 曲线,或 反应-网格-实例,或者读到什么 要使用的钩
- 阴道: 见 演示 与 v3 斜弧 或者说 v2 曲线
- 奥雷利亚数字 : 奥雷利亚-网球,参见 演示
扩展库
您可以用这样的代码轻松地扩展或补丁网格:
// extend gridstack with our own custom method
GridStack.prototype.printCount = function() {
console.log('grid has ' + this.engine.nodes.length + ' items');
};
let grid = GridStack.init();
// you can now call
grid.printCount();
扩展引擎
现在可以轻松地创建出自己的布局引擎来进一步自定义你的用法. 这里有一个打字例
import { GridStack, GridStackEngine, GridStackNod, GridStackMoveOpts } from 'gridstack';
class CustomEngine extends GridStackEngine {
/** refined this to move the node to the given new location */
public moveNode(node: GridStackNode, o: GridStackMoveOpts): boolean {
// keep the same original X and Width and let base do it all...
o.x = node.x;
o.w = node.w;
return super.moveNode(node, o);
}
}
GridStack.registerEngine(CustomEngine); // globally set our custom class
更改网格列
GridStack 使您在需要 [1-12] 框外的列( 默认为 12) 时非常容易, 但是您总是需要 两件事 如果您需要自定义 :
- 改变
column创建您数字 N 的网格时的网格选项
GridStack.init( {column: N} );
- 还包括:
gridstack-extra.css若为 N < 12号 (然后是自定义 CSS - 见下一节). 没有这些,事情就不会得到正确处理.
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
<link href="node_modules/gridstack/dist/gridstack-extra.min.css" rel="stylesheet"/>
<div class="grid-stack">...</div>
注:类别 .grid-stack-N 自动添加,我们包括 gridstack-extra.min.css 定义带有自定义 [2-11] 列的网格的 CSS。 任何更多,你都需要自己生成SASS/CSS(见下).
参见实例: 2个网格演示 有6个栏
自定义列 CSS
如果您需要 > 12列或想要手工生成 CSS , 您需要生成 CSS 规则 .grid-stack-item[gs-w="X"] 财务报告和审定财务报表 .grid-stack-item[gs-x="X"]。 。 。 .
例如,对于四列网格,您需要 CSS :
.gs-4 > .grid-stack-item[gs-x="1"] { left: 25% }
.gs-4 > .grid-stack-item[gs-x="2"] { left: 50% }
.gs-4 > .grid-stack-item[gs-x="3"] { left: 75% }
.gs-4 > .grid-stack-item { width: 25% }
.gs-4 > .grid-stack-item[gs-w="2"] { width: 50% }
.gs-4 > .grid-stack-item[gs-w="3"] { width: 75% }
.gs-4 > .grid-stack-item[gs-w="4"] { width: 100% }
更好的是,这里有一个SCSS代码片段, 你可以使用网站,比如 sassmeistor.com (中文(简体) ) 为您生成 CSS :
$columns: 20;
@function fixed($float) {
@return round($float * 1000) / 1000; // total 2+3 digits being %
}
.gs-#{$columns} > .grid-stack-item {
width: fixed(100% / $columns);
@for $i from 1 through $columns - 1 {
&[gs-x='#{$i}'] { left: fixed((100% / $columns) * $i); }
&[gs-w='#{$i+1}'] { width: fixed((100% / $columns) * ($i+1)); }
}
}
您也可以使用 SCSS 软件 src/gridstack-extra.scs (英语) 列入国家防范机制包并作修改以增加栏目.
30个列的 gulp 样本命令 :
gulp.src('node_modules/gridstack/dist/src/gridstack-extra.scss')
.pipe(replace('$start: 2 !default;','$start: 30;'))
.pipe(replace('$end: 11 !default;','$end: 30;'))
.pipe(sass({outputStyle: 'compressed'}))
.pipe(rename({extname: '.min.css'}))
.pipe(gulp.dest('dist/css'))
覆盖可调整/可调整选项
您可以覆盖默认 resizable编号 :draggable 选项。 例如启用其它右下角调整大小的手柄
你可以进入网格的像:
GridStack.init({
resizable: {
handles: 'e,se,s,sw,w'
}
});
触摸装置支持
gridstack v6+ 现在支持移动出框,同时添加了本地触摸事件(连同鼠标事件),用于拖放和调整大小. 更古老的版本(3.2+)需要jq版本并加上了触摸出出拳来,但与被打入巢的网格效果不佳.
此选项现在是默认 :
let options = {
alwaysShowResizeHandle: 'mobile' // true if we're on mobile devices
};
GridStack.init(options);
见 实例。 。 。 .
移动
移动到 v. 6
从0.6.x开始 change 事件不再被发送(对于几乎大多数节点!),因为项目只是添加/删除,除非它也改变其他节点(不正确并造成效率低下)。 您可能需要跟踪 added|removed 事件 如果你没有 并依赖 旧的破败行为.
移动到 v1
v1.0.0 从API和外部依赖中移除了Jquery,这将需要一些代码修改. 以下是更改列表:
-
ưμ㼯a
-
您的代码只需要
import GridStack from 'gridstack'或包含gridstack.all.js财务报告和审定财务报表gristack.css(不包括其他JS),建议你这样做,因为内部依赖性会随时间而改变. 如果你是JKERY总部,看 jquery 应用程序 节. -
代码更改 :
旧的 初始化代码 + 添加部件 + 添加事件 :
// initialization returned Jquery element, requiring second call to get GridStack var
var grid = $('.grid-stack').gridstack(opts?).data('gridstack');
// returned Jquery element
grid.addWidget($('<div><div class="grid-stack-item-content"> test </div></div>'), undefined, undefined, 2, undefined, true);
// jquery event handler
$('.grid-stack').on('added', function(e, items) {/* items contains info */});
// grid access after init
var grid = $('.grid-stack').data('gridstack');
新建
// element identifier defaults to '.grid-stack', returns the grid
// Note: for Typescript use window.GridStack.init() until next native 2.x TS version
var grid = GridStack.init(opts?, element?);
// returns DOM element
grid.addWidget('<div><div class="grid-stack-item-content"> test </div></div>', {width: 2});
// Note: in 3.x it's ever simpler
// grid.addWidget({w:2, content: 'test'})
// event handler
grid.on('added', function(e, items) {/* items contains info */});
// grid access after init
var grid = el.gridstack; // where el = document.querySelector('.grid-stack') or other ways...
其他重命名更改
`GridStackUI` --> `GridStack`
`GridStackUI.GridStackEngine` --> `GridStack.Engine`
`grid.container` (jquery grid wrapper) --> `grid.el` // (grid DOM element)
`grid.grid` (GridStackEngine) --> `grid.engine`
`grid.setColumn(N)` --> `grid.column(N)` and `grid.column()` // to get value, old API still supported though
建议看 许多样本 更多代码示例.
移动到 v2
确保首先读取 v1 迁移 !
v2是一个Typescript重写1.x,去除所有jquery事件,使用类和整体代码清理支持ES6模块. 您的代码可能需要从 1. x 更改
- 在一般方法中,没有使用args(getter) vs setter,当参数不同时(set/get也不是函数调用,所以API会更改),不能在TS中使用. 相反,我们决定 返回所有设定的方法
GridStack它们可以连锁(例如:grid.float(true).cellHeight(10).column(6)) (中文(简体) ). 另外,过去使用许多参数的遗留方法现在将采用单一对象(通常为:GridStackOptions或者说GridStackWidget) (中文(简体) ).
`addWidget(el, x, y, width, height)` --> `addWidget(el, {with: 2})`
// Note: in 2.1.x you can now just do addWidget({with: 2, content: "text"})
`float()` --> `getFloat()` // to get value
`cellHeight()` --> `getCellHeight()` // to get value
`verticalMargin` --> `margin` // grid options and API that applies to all 4 sides.
`verticalMargin()` --> `getMargin()` // to get value
-
事件签名是通用的,不再依赖jquery-ui.
gsresizestop已删除为resizestop|dragstop现在叫做 之后 dOM 属性已更新. -
oneColumnMode会在window.width< 768px 默认值。 我们现在检查网格宽度( 更正确并支持筑巢) 。 你可能需要调整网格oneColumnSize或者说disableOneColumnMode。 。 。 .
说明: 2.x由于使用更紧凑的ES6输出和打字本地代码,不再支持遗留的IE11及更老. 你需要留在一号线
移动到 v3
确保先读 v2 迁移 !
v3有一个新的 HTML5 拖放插件( 共63k, 所有本地代码), 同时仍然允许您使用遗留的 jquery- ui 版本取而代之 (188k), 或一个新的静态网格版本( 34k, 没有用户拖放而是完整的 API 支持) 。 您需要决定使用哪个版本作为 gridstack.all.js 已经不复存在(现在也是) gridstack-jq.js- 看见了 包含信息。 。 。 .
页:1: HTML5 版本与以 jquery- ui 为主的旧拖放几乎是等价的. 页:1 containment (防止儿童被拖出父母的门外)和 revert (尚不清楚其用途)在 v3.0.0 的初始发布中尚未执行.
还有移动设备不支持h5 drag 事件(需要处理) touch) 而 v3.2 jq 版本现在支持退出框(参见 v3.2 释放(中文(简体) )
中断更改 :
-
包括(如上所述)需要改变
-
GridStack.update(el, opt)现在要单身GridStackWidget而不是只支持(x,y,w,h),但联署材料中遗留下来的呼声目前将继续沿用。 这种方法是一个完全重写的方法,现在对所有可用的参数进行正确的限制和更新. -
locked(), (中文(简体) ),move(), (中文(简体) ),resize(), (中文(简体) ),minWidth(), (中文(简体) ),minHeight(), (中文(简体) ),maxWidth(), (中文(简体) ),maxHeight()方法被隐藏在 Typescript (JS 仍然可以调用) , 因为它们只是周围的一行包update(el, opt)无论如何,而且会很快离开。 (单位:千美元)move(el, x, y)=>update(el, {x, y})(中文(简体) ) -
项目属性类似
data-gs-min-width现在gs-min-w。我们从所有属性中删除了“ data ” , 将“ width- hiight” 缩写为“ w|h ” , 以要求打字次数少, 效率更高(2k 仅用. js 保存 !) . -
GridStackWidget用于大多数 APIwidth|height|minWidth|minHeight|maxWidth|maxHeight现在更短w|h|minW|minH|maxW|maxH还有
移动到 v4
确保先读出v3迁移!
v4 是一个完整的重写相撞并拖入/出高压以修正一些非常长的站立请求和bug. 它还大大提高了可用性。 详读出下注.
不太可能,也许 中断更改( 内部使用 ) :
-
removeTimeout已删除( 垃圾后反馈将立即删除 - 鼠标上实际删除) -
以下
GridStackEngine方法改变(内部使用,不影响GridStack公共 API)
// moved to 3 methods with new option params to support new code and pixel coverage check
`collision()` -> `collide(), collideAll(), collideCoverage()`
`moveNodeCheck(node, x, y, w, h)` -> `moveNodeCheck(node, opt: GridStackMoveOpts)`
`isNodeChangedPosition(node, x, y, w, h)` -> `changedPosConstrain(node, opt: GridStackMoveOpts)`
`moveNode(node, x, y, w, h, noPack)` -> `moveNode(node, opt: GridStackMoveOpts)`
- (v.0.6-v1方法/设备)
getGridHeight(), (中文(简体) ),verticalMargin, (中文(简体) ),data-gs-current-height, (中文(简体) ),locked(), (中文(简体) ),maxWidth(), (中文(简体) ),minWidth(), (中文(简体) ),maxHeight(), (中文(简体) ),minHeight(), (中文(简体) ),move(), (中文(简体) ),resize()
移动到 v5
确保先读出v4迁移!
v5 没有任何从 v4 的分解变化,而是以 h5 模式聚焦于嵌入网格: 您现在可以拖入或拖出父方到被窝子, 并带有新的 API 参数值 。 见出所注.
移动到 v6
aPI 并没有从 v5 真正更改,而是完全重写 Drag&Drop 以使用本地 mouseevent (而不是HTML可拖取= truth 这在Mac Safari上是buggy, 而在移动设备上不起作用)和 touchevent (移动),而且我们不再有jquery ui选项(对于被嵌入的网格来说效果不好,不想维持后遗症).
主要的区别在于您只需要包含 grestack.js 并让 D&D(桌面和移动) 出框,大小与 h5 版本相同.
移动到 v7
新加法,每句没有API中断. 参见有关在苍蝇上创建子网格的发布注释.
移动到 v8
如果使用嵌入式网格JSON格式,或原角包装器,或依赖特定的CSS路径,则可能发生断裂变化. 目标也是ES2020(见发布说明).
GridStackOptions.subGrid- > (中文)GridStackOptions.subGridOpts复更名相. 我们现在有了GridStackWidget.subGridOpts对GridStackNode.subGrid(这两类都容易出错)GridStackOptions.addRemoveCB- > (中文)GridStack.addRemoveCB现在为全局性,而不是网格选项- 删除
GridStackOptions.dragInOptions自此以来GridStack.setupDragIn()自4.0起更换 - 删除
GridStackOptions.minWidth5.1 已过时,使用oneColumnSize换成 - CSS 规则已删除
.grid-stack任何已基于 gs 的字符前缀, 12 列( 默认) 现在使用.gs-12外加cs还不到原尺寸的四分之一,gs-min|max_w|h属性不再写入( 但已读)
j 查询应用程序
这是 旧的,不再适用于v6+。您需要使用v5.1.1 和之前
import 'gridstack/dist/gridstack.min.css';
import { GridStack } from 'gridstack';
import 'gridstack/dist/jq/gridstack-dd-jqueryui';
说明数字 : jquery 打开 jquery-ui 以名称导入,所以您必须在您的网络包(或等同的)配置文件中指定其位置,
也就是说你可以带自己的版本
alias: {
'jquery': 'gridstack/dist/jq/jquery.js',
'jquery-ui': 'gridstack/dist/jq/jquery-ui.js',
'jquery.ui': 'gridstack/dist/jq/jquery-ui.js',
'jquery.ui.touch-punch': 'gridstack/dist/jq/jquery.ui.touch-punch.js',
},
或者( 单个合并文件) html
<link href="node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
<!-- HTML5 drag&drop (70k) -->
<script src="node_modules/gridstack/dist/gridstack-h5.js"></script>
<!-- OR jquery-ui drag&drop (195k) -->
<script src="node_modules/gridstack/dist/gridstack-jq.js"></script>
<!-- OR static grid (40k) -->
<script src="node_modules/gridstack/dist/gridstack-static.js"></script>
我们有本地 HTML5 拖放程序通过插件系统( 默认), 但是 jquery- ui 版本可以使用 。 会捆绑的 jquery (3.5.1) + jquery-ui (1.13.1 最小拖放量)+ jquery-ui-touch-punch (1.08用于移动支持) gridstack-jq.js。 。 。 .
注:在v4、v3中:我们ES6模块按名称导入jquery & jquery-ui,所以您需要指定这些.js文件的位置,这意味着您也可以带出自己的版本. 参见包含说明.
注:v1.x IFF 您想要使用 gradstack- jq 来代替, 您的应用程序需要带来自己的 JQ 版本, 您应该 换成 包含 gridstack-poly.min.js (可选 IE 支持) + gridstack.min.js + 键 gridstack.jQueryUI.min.js 在您导入您的 JQ libs 后 。 但请注意,jQuery和ES6进口存在问题(见 1306号) (中文(简体) ).
至于事件,你还可以使用 $(".grid-stack").on(...) 我们不支持的版本.
变动
查看我们的更改日志 这里。 。 。 .
监察组
gregstack.js 目前由 : 阿兰·杜梅斯尼,在那之前 迪伦·魏斯,最初由 帕维尔·雷兹尼科夫我们赞赏 所有贡献者 寻求帮助.