javascript - Jquery UI 可拖动/可拖放捕捉到网格未正确定位

标签 javascript jquery html css jquery-ui

我一直在尝试 JqueryUI 来完成一个简单的任务,我需要实现一个基本的拖放功能。我注意到当我使用捕捉到网格选项时,元素在被放到目标容器时没有正确对齐。尽管我将容器定义为目标区域,但它会从其容器中计算可拖动元素的位置。

请在此处查看示例代码:https://jsfiddle.net/9yzL87md/7/

 $( function() {
        $( ".spare-item" ).draggable({
            grid: [ 26, 26 ],
            containment: "#preview",
            cursor: "grab",
            revert: "invalid",
            start: function( event, ui ) {
                console.log(ui);
                console.log(ui);
            }                
        });
        $( "#preview" ).droppable({
                accept: ".spare-item",
                over: function(event, ui) {
                    $(".spare-item").draggable({
                        grid: [26, 26]
                    });
                },
                out: function(event, ui) {
                    $(".spare-item").draggable("option", "grid", false);
                },
        drop: function( event, ui ) {
            var pos = ui.draggable.offset(), dPos = $(this).offset();
            //console.log(pos.top - dPos.top, pos.left - dPos.left);
        }
        });            
    } ); 

以上是我的布局示例,以便于理解。如果您尝试拖动红色元素,它会立即将其带入灰色框中,但会被捕捉到比下边框低一点的位置。我尝试了许多类似的问题和解决方案,但没有运气。我在这里错过了什么? (容器的宽度是234px,红色元素的宽度是26px,我希望红色元素在一个26 x 26的格子里对齐)

最佳答案

这里有多个问题。可拖动元素仍在较低的 div 中,并受边距和填充的影响,这会相对于您的 .item-container 抵消它们。最后,因为它们是行内 block 元素(与 block 元素相反),所以 TAGS 之间的空白导致元素之间出现空白。要么将它们变成 block 元素,要么备用项 div 标记之间不能有任何空格。

网格似乎被原始元素位置偏移了,所以偏移备用元素有一个偏移网格。

结果:https://jsfiddle.net/9yzL87md/10/

  1. 边距和填充

.output、.actions 或 .item-container 都不能有影响备用项的边距或填充。

.output{
    background:#646464;
#    padding: 5px; removed
}

.actions{
    width: 234px;
    margin: 0px auto;
#    padding: 5px; removed
}

.item-container{
    height: 26px;
    margin: 0px auto; #no vertical
}

.spare-item{
    background: red;
    display: inline-block;
    width: 26px;
    height: 26px;
    margin: 0 0; # no horizontal margin
}
  1. 行内 block 空白

如果有任何空格(空格、制表符、换行符),行内 block 元素之间会有一个空格。所以要么制作备用元素元素 显示: block 或使用以下任何变体删除它们之间的空格:

<div class="actions item-container"><!--
  --><div class="spare-item"></div><!--
  --><div class="spare-item"></div><!--
  --><div class="spare-item"></div><!--

-->

或此处描述的其他技巧之一 https://css-tricks.com/fighting-the-space-between-inline-block-elements/

万一链接失效,列出的选项是:

  • 移动标签,使 div 之间没有空格
  • div之间的html注释
  • 元素 div 的负边距以对抗 空格
  • 不放置结束标签,因为 html5 允许(还没有 对此进行了测试)
  • 字体大小:0;在元素容器上(对我不起作用)

关于javascript - Jquery UI 可拖动/可拖放捕捉到网格未正确定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801422/

相关文章:

javascript - 如何在不刷新页面的情况下重定向到 anchor 标记?

jquery - 我应该为 jQuery slider 使用 Sprite 吗?

javascript - 使用depends和max - jquery验证

html - 所列元素的元素符号点未对齐

html - bootstrap - 将表数据相互对齐

javascript - 如何访问对象数组中的动态键

javascript - 如何获取调用者事件和dom元素id

javascript - Delete By Query API 以 curl 方式工作,但不在 Node-Red 中

javascript - 验证模态中的输入字段

html - asp.net css 为什么 div 子内容不在父级上