Yur*_*ter 5 javascript jquery drag-and-drop nested gridstack
我正在尝试创建此行为,并且不确定Gridstack是否支持它。我有3个Gridstack网格:Grid1,Grid2和Grid3。 Grid1是一个独立的网格,Grid3嵌套在Grid2内。我需要能够将小部件从Grid1拖动到Grid2(外部网格)和Grid3(嵌套网格)中。按照示例,我能够在2个顶级网格之间拖动小部件并创建一个嵌套网格,但不能将这2个网格组合在一起。如果支持,则不建议使用任何指针。
注意:将代码段扩展到全屏
$(document).ready(function() {
$('.grid-stack').gridstack();
});
Run Code Online (Sandbox Code Playgroud)
.grid-stack {
background: lightgoldenrodyellow;
}
.grid-stack-item-content {
color: #2c3e50;
text-align: center;
background-color: #18bc9c;
}
.grid-stack .grid-stack {
/*margin: 0 -10px;*/
background: rgba(255, 255, 255, 0.3);
}
.grid-stack .grid-stack .grid-stack-item-content {
background: lightpink;
}
Run Code Online (Sandbox Code Playgroud)
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.4.0/gridstack.min.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.0/jquery-ui.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.min.js"></script>
<script type="text/javascript" src='//cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.4.0/gridstack.min.js'></script>
<script type="text/javascript" src='//cdnjs.cloudflare.com/ajax/libs/gridstack.js/0.4.0/gridstack.jQueryUI.min.js'></script>
<div class="container-fluid">
<h1> Multilevel Nested grids demo</h1>
<div class="grid-stack" id="container-stack">
<div class="grid-stack-item" data-gs-x="0" data-gs-y="0" data-gs-width="4" data-gs-height="4">
<div class="grid-stack-item-content">
<span>Grid One</span>
<div class="grid-stack" id="grid-one">
<div class="grid-stack-item widget" data-gs-x="0" data-gs-y="0" data-gs-width="3" data-gs-height="1">
<div class="grid-stack-item-content">1</div>
</div>
<div class="grid-stack-item widget" data-gs-x="3" data-gs-y="0" data-gs-width="3" data-gs-height="1">
<div class="grid-stack-item-content">2</div>
</div>
</div>
</div>
</div>
<div class="grid-stack-item" data-gs-x="4" data-gs-y="0" data-gs-width="8" data-gs-height="4">
<div class="grid-stack-item-content">
<span>Grid Two</span>
<div class="grid-stack" id="grid-two">
<div class="grid-stack-item widget" data-gs-x="0" data-gs-y="0" data-gs-width="3" data-gs-height="1">
<div class="grid-stack-item-content">3</div>
</div>
<div class="grid-stack-item widget" data-gs-x="3" data-gs-y="0" data-gs-width="3" data-gs-height="1">
<div class="grid-stack-item-content">4</div>
</div>
<div class="grid-stack-item" data-gs-x="6" data-gs-y="0" data-gs-width="6" data-gs-height="3">
<div class="grid-stack-item-content">
<span>Grid Three</span>
<div class="grid-stack" id="grid-three">
<div class="grid-stack-item widget" data-gs-x="0" data-gs-y="0" data-gs-width="6" data-gs-height="1">
<div class="grid-stack-item-content">5</div>
</div>
<div class="grid-stack-item widget" data-gs-x="6" data-gs-y="0" data-gs-width="6" data-gs-height="1">
<div class="grid-stack-item-content">6</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
根据示例,我能够在两个顶级网格之间拖动小部件并创建一个嵌套网格,但不能将这两个网格组合在一起。如果支持的话
可悲的是,这是不可能的。至少,不与gridstack
.
这种拖动机制背后的关键是通过acceptWidgets选项来完成的。但这不能处理多级.grid-stack
元素。因此,出现错误。
您可以尝试将代码片段中添加的脚本修改为如下所示:
$("#container-stack").gridstack({
acceptWidgets: '.grid-stack-item'
})
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,一旦您开始拖动任何小部件,这将导致错误。但它适用于单级嵌套,这绝对不是您想要的。
该文档也没有指出任何有关嵌套级别拖动的信息。
我想这(几乎)正是您想要的。但没有任何官方回应。而且,已经三岁了。表明该项目即将消亡的另一个缺陷是,当您尝试访问其某些文件(例如脚本)时,您会收到安全警告,这使我暂时无法添加此代码片段。
因此,如果我是你,我会选择jqueryUI
并自定义代码。
这是与您所期望的类似的片段,我猜,让我知道这是否正确,然后我将再次改进它,例如添加调整大小、捕捉到同级小部件以及其他一些内容:
再次在全屏模式下检查代码片段。
$("#container-stack").gridstack({
acceptWidgets: '.grid-stack-item'
})
Run Code Online (Sandbox Code Playgroud)
$("#gridThree").draggable({
snap: '#gridTwo',
snapMode: 'inner',
zIndex: 5,
containment: 'parent'
});
$(".widgetInOne, .widgetInTwo, .widgetInThree").draggable({
snap: '#gridOne, #gridTwo, #gridThree',
snapMode: 'inner',
zIndex: false,
stack: 'div',
cursor: 'grab',
// grid: [ 100, 100 ]
});
$("#gridOne, #gridTwo, #gridThree").droppable({
accept: '.widgetInOne, .widgetInTwo, .widgetInThree',
drop: function(event, ui) {
if ($(event.target).find($(event.toElement)).length == 0) {
$(event.toElement).css({
'left': '',
top: ''
});
$(event.target).append($(event.toElement));
}
}
});
Run Code Online (Sandbox Code Playgroud)
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
#gridOne {
background: #cecece;
width: 40%;
height: 400px;
display: inline-block;
margin-right: 4%;
vertical-align: top;
}
.widgetInOne,
.widgetInTwo,
.widgetInThree {
width: 100px;
height: 100px;
padding: 0.5em;
}
#gridTwo {
background: #bfe9f3;
width: 50%;
height: 400px;
display: inline-block;
margin-left: 4%;
vertical-align: top;
position: relative;
}
#gridThree {
background: #ffdda9;
width: 300px;
height: 300px;
display: inline-block;
vertical-align: top;
position: absolute;
right: 100px;
top: 0;
}
Run Code Online (Sandbox Code Playgroud)
这里有一些值得注意的事情:
目前,小部件仅捕捉到网格内边缘(而不是其他小部件的外侧),以查找更多检查:这里我找不到任何其他选项,只能用于// grid: [ 100, 100 ]
此选项。
这里还没有添加可调整大小的选项,希望您可以根据需要进行调整
归档时间: |
|
查看次数: |
959 次 |
最近记录: |