Yar*_*rin 13 jquery jquery-ui jquery-draggable
(注意: 有些人提出了类似的问题,但过于具体而没有得到有用的答案)
jQuery UI的可拖动小部件具有捕捉到网格的选项,但无法设置网格相对于什么.
例如,我们的放置目标中有一个明确定义的20x20网格.在放置目标内以0,0开始的拖动项将与网格对应捕捉.但是,从不同位置或放置目标外部开始的拖动项目将不会与该网格对齐.
HTML:
<div class="drop-target">
<div class="drag-item">Drag me</div>
<div class="drag-item" style="left:87px;top:87px;">Drag me</div>
</div>
<div class="outside-drag-item">Drag me</div>
Run Code Online (Sandbox Code Playgroud)
JS:
$(function() {
$(".drag-item").draggable({
grid: [20, 20]
});
$(".outside-drag-item").draggable({
grid: [20, 20],
helper:"clone"
});
$(".drop-target").droppable({
accept: ".drag-item"
});
});
Run Code Online (Sandbox Code Playgroud)
有没有办法使用jQuery draggable捕捉到特定的网格?
Nat*_*ate 19
我也会继续在这里发一个答案,虽然我是通过你问的后续问题来到这里的.
您可以drag在jQuery UI可拖动的事件内非常轻松地创建自己的对齐网格功能.
基本上,您想要检查当前ui位置在拖动拖动到网格的任何点处的接近程度.该接近度总是可以表示为位置的剩余部分除以网格.如果该余数小于或等于snapTolerance,则只需将该位置设置为没有该余数的位置.
在散文中说这很奇怪.在代码中应该更清楚:
// Custom grid
$('#box-3').draggable({
drag: function( event, ui ) {
var snapTolerance = $(this).draggable('option', 'snapTolerance');
var topRemainder = ui.position.top % 20;
var leftRemainder = ui.position.left % 20;
if (topRemainder <= snapTolerance) {
ui.position.top = ui.position.top - topRemainder;
}
if (leftRemainder <= snapTolerance) {
ui.position.left = ui.position.left - leftRemainder;
}
}
});
Run Code Online (Sandbox Code Playgroud)
小智 5
作为尝试在jQuery UI中使用grid选项的一种替代方法,我创建了自己的网格(可以使用css使其可见或不可见),然后使用snap选项并指定每条网格线的类。
在您的原始jsfiddle中,我添加了以下CSS:
.gridlines {
display: none;
position:absolute;
background-color:#ccc;
}
Run Code Online (Sandbox Code Playgroud)
和以下javascript:
function createGrid(size) {
var i,
sel = $('.drop-target'),
height = sel.height(),
width = sel.width(),
ratioW = Math.floor(width / size),
ratioH = Math.floor(height / size);
for (i = 0; i <= ratioW; i++) { // vertical grid lines
$('<div />').css({
'top': 0,
'left': i * size,
'width': 1,
'height': height
})
.addClass('gridlines')
.appendTo(sel);
}
for (i = 0; i <= ratioH; i++) { // horizontal grid lines
$('<div />').css({
'top': i * size,
'left': 0,
'width': width,
'height': 1
})
.addClass('gridlines')
.appendTo(sel);
}
$('.gridlines').show();
}
createGrid(20);
Run Code Online (Sandbox Code Playgroud)
这是jsFiddle(http://jsfiddle.net/madstop/46sqd/2/)
| 归档时间: |
|
| 查看次数: |
18845 次 |
| 最近记录: |