这也让我摸不着头脑。我在我的 .NET Core 5 和 JavaScript 项目中使用 gridstack.js。
我正在使用 CDN 将 gridstack js 库拉入我的项目中,因此我将下面的链接放在我的网页标题中:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gridstack@4.2.7/dist/gridstack.min.css" />
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/gridstack@4.2.7/dist/gridstack-h5.js"></script>
我有一个设计器页面,用户在其中构建自己的 gridstack 小部件布局,网格容器有一些自定义 css,因此它延伸到页面底部:
CSS 形成网格容器。/
.gridContainer {
position: absolute;
height: calc(100vh - 245px);
min-height: calc(100vh - 245px);
width: 100%;
min-width: 100%;
outline: none;
/*touch-action: none;*/
background-color: #191919;
position: relative;
padding: 0px;
}
容器如下所示:
您会注意到我在网格容器上方有一个中间导航栏,用于配置小部件内容的下拉菜单选项。上面的 CSS 自动计算/设置容器的高度,方法是使用整个屏幕高度减去我网页上页眉/导航栏和页脚的高度。调整环境中的 CSS 以适应...
现在对于我的网格布局,我有 12 列,也有相当于 12qty 行的工作。如果您考虑网格布局,则 12 x 12 网格是最灵活的选项,因为它允许用户创建以下布局:
1路 2路 3路 4路(四路) 6路 9路 以此类推...
通过将网格单元格高度设置为 % 而不是设置高度来实现等效的行数。该库的作者本人实际上说使用 % 不起作用,并且它对我也不起作用,直到我注意到在初始化网格时我们可以轻松解决的特定行为模式。
有了上面使用 % 作为单元格高度的点,在页面加载功能初始化网格堆栈布局时,这里要做的关键是添加一个小部件并将高度设置为 12 个单位。出于某种原因,这在确认/注册网格容器的当前高度的库中做了一些神奇的事情。渲染第一个小部件后,您可以立即将其删除并继续使用不同的高度添加新的小部件,而不会出现渲染问题。
实际网格容器的 HTML:
<div class="container-fluid p-0 mt-1" style="">
<div class="grid-stack gridContainer" id="gridContainer" style="overflow-y: auto">
<!-- JS inserts gridstack widgets here. -->
</div>
</div>
Javascript函数:
window.onload = function () {
let opts = {
// see other possible values (best to do in here)
// Approximate calcs are 100 / 12 rows = 8.3333%
cellHeight: '8.3333%',
//cellHeightThrottle: 200, // Not currently in use...
margin: '2px',
}
grid = GridStack.init(opts);
// Important Note: Add the first widget so the library registers the container height.
// Otherwise the drag tool rendering wont work correclty.
// Once the first widget is added, the same widget can be deleted and the rendering will
// continue to function correctly.
var widgetId = getGUIDv4();
grid.addWidget('<div class="grid-stack-item" id="' + widgetId + '" onmouseup="onMouseUp(this.id)" style="border: 1px solid #495057;"><div class="grid-stack-item-content">Widget</div></div>', { w: 1, h: 12 });
}
在上面的 js 函数中需要注意的重要一点是,我将单元格高度设置为 %,这样可以确保当我们进入全屏模式时,小部件会自动调整到全屏的高度。(无论如何,小部件宽度都有效)
一旦网格首次加载并且第一个小部件被渲染,即我们配置为高度为 12 个单位的小部件,即网格容器的全高,用户可以重新调整该小部件的高度/宽度以适应,然后继续添加更多小部件以构建他们选择的布局。
当下一个小部件添加到网格中时,我们使用一个从按钮调用的单独函数(在我的情况下,您在网格容器上方的导航栏上看到加号 btn):
function addWidget() {
var widgetId = getGUIDv4();
grid.addWidget('<div class="grid-stack-item" id="' + widgetId + '" onmouseup="onMouseUp(this.id)" style="border: 1px solid #495057;"><div class="grid-stack-item-content">Widget</div></div>', { w: 1, h: 1 });
}
// Function toggles the dashboard canvas layout to full screen mode
function goFullScreen() {
var container = document.getElementById("gridContainer");
if (container.requestFullScreen) {
container.requestFullScreen();
}
else if (container.webkitRequestFullScreen) {
container.webkitRequestFullScreen();
}
else if (container.mozRequestFullScreen) {
container.mozRequestFullScreen();
}
}
下面的屏幕截图显示了我快速绘制 6 路布局的位置:
当我点击导航栏上的全屏按钮时,小部件会自动调整大小以填满全屏: