如何捕捉可拖动项目到有限的容器
How to snap draggable item to limited container
我在javascript中创建简单的方块益智游戏时有一个问题。我试图捕捉元素到网格,但我不知道如何限制下降,如果我的元素打破了网格的限制,被声明为可掉落。
我已经创建了一个小提琴:demo
我使用以下代码:
html: <div class="row">
<div class="cell"> </div>
<div class="cell"> </div>
<div class="cell"> </div>
<div class="cell"> </div>
<div class="cell"> </div>
</div>
<div class="element drag"> </div>
JS:
$( init );
function init() {
$('.drag').draggable({ snap: ".cell", revert: "invalid" });
$('.cell').droppable({
drop: handleElementDrop
});
}
function handleElementDrop( event, ui ) {
dragger = ui.draggable;
dragger.draggable( 'disable' );
$(this).droppable( 'disable' );
dragger.position( { of: $(this), my: 'left top', at: 'left top' } );
dragger.draggable( 'option', 'revert', false );
}
如何解决在网格中定位元素的问题,如果元素在网格之外,或者如果它超过不可掉落的单元格(如果我们假设我们已经在单元格中有一些掉落的元素),则防止掉落元素?
我也有问题与HandleElementDrop函数和位置的可拖放,它总是把元素一个单元格的权利相对于被拖放的单元格。
所以我做了一个DEMO和一些建议。
尝试使用grid
属性设置为100x100网格,而不是捕捉到.cell
:
$('.drag').draggable({ snap: ".gameGrid", grid: [100,100]});
也改变.element
的尺寸,考虑1px的边框:
.cell {
border-right: 1px solid #000000;
border-bottom: 1px solid #000000;
float: left;
width: 99px;
height: 99px;
}
如果边界在.gameGrid
之外,为了忽略drop,您可以使用event.position
属性在handleElementDrop
方法上编写更多逻辑。
相关文章:
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 删除对HTML元素的拖动
- jQuery UI可排序-多连接列表拖动
- 禁用SVG拖动
- 旋转后拖动对象
- JQuery UI可拖动潜水与滚动棒到鼠标
- jsPlumb-拖动克隆而不进行复制
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- 如何使元素在可拖动元素内可单击
- 如何在使用Kinetic拖动同一对象后,在旋转动画中保持先前的偏移
- jQuery UI可拖动:自定义捕捉方法
- javascript可拖动滑块,可在mouseUp上捕捉回中间位置
- 当一个元素被拖动到另一个容器并被捕捉到该容器时,如何强制jquery将其居中
- 捕捉.svg拖动路径元素
- 沿路径捕捉.svg拖动
- 捕捉.svg拖动“真实”位置
- 在拖动时禁用Fullcalendar计划程序事件捕捉
- 捕捉svg拖动一组集合
- 可拖动元素使其以高snapTolerance捕捉到其周围的顶点
- 如何捕捉可拖动项目到有限的容器