如何设置jquery UI可拖动的开始位置

发布于 2024-11-28 22:39:20 字数 663 浏览 0 评论 0原文

我正在使用 jQuery UI 和同位素,同位素对元素的定位做了很多事情,并且弄乱了拖动元素的开始位置。

当我开始拖动时,我尝试拖动的元素显示在父级的左上角,而不是光标下方。

我查看了“开始”函数,并从事件中获得了正确的 x,y 坐标,但我似乎无法将这些值应用于克隆的可拖动项目。

我的代码看起来像这样,

jQuery('div.item').draggable({
         helper: function(event, ui){
                 jQuery('div.hold_items').isotope('destroy');
                  var item_dragged = jQuery(this).clone().appendTo('body').css({'z-index':500,'top':event.clientY, 'left':event.clientX});
                 start_isotope();
                 return recipe_dragged;

         }
});

我必须执行启动/停止同位素来解决同位素破坏可投放功能并且项目不知道它们被投放到哪里的问题。

我确信有一种方法可以设置可拖动的起始位置,但我似乎在文档中找不到它,只是一种开始的方法。

I'm using jQuery UI and isotope, isotope does a bunch of things to the positioning of elements, and is messing up the start position of a dragged element.

When I start a drag, the element I am attempting to drag shows up in the top left of the parent, rather than underneath the cursor.

I've looked at the 'start' function, and I get the correct x,y coordinates from the event, but I can't seem to apply those values to the cloned draggable item.

My code looks like this

jQuery('div.item').draggable({
         helper: function(event, ui){
                 jQuery('div.hold_items').isotope('destroy');
                  var item_dragged = jQuery(this).clone().appendTo('body').css({'z-index':500,'top':event.clientY, 'left':event.clientX});
                 start_isotope();
                 return recipe_dragged;

         }
});

I have to do the start/stop isotope to resolve an issue where isotope is breaking the droppable function and items don't know where they are being dropped.

I'm sure there is a way to SET the draggable start-position, but I can't seem to find it in the documentation, just a way to get the start.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

愿得七秒忆 2024-12-05 22:39:20

发布我的答案是因为我在其他地方找不到答案-
我遇到了你所描述的问题,我是这样解决的。
定位助手(它将尝试重置为 0,0)
然后我们在重置为 0,0 之前返回 false
它被取消并位于正确的位置,但随后我们通过复制用于启动拖动的事件来重新启动拖动。

$(" #container").droppable({
drop: function (event, ui) {
    $(ui.draggable).detach().css({
        top: 0,
        left: 0
    }).appendTo(this);

}
});

$(" #draggable").draggable({
start: function (event, ui) {
    if ($(event.target).parent().is('.ui-droppable')) {
        var x = ($(this).offset().left);
        var y = ($(this).offset().top);
        var p = $(event.target).parent().parent();
        $(event.target).detach().insertAfter(p);
        $(ui.helper).css({
            'left': x - $(event.target).offset().left,
            'top': y - $(event.target).offset().top
        });
        var eventCopy = document.createEvent("MouseEvents");
        eventCopy.initMouseEvent(event.type, event.bubbles, event.cancelable, event.view, event.detail,
        event.pageX || event.layerX, event.pageY || event.layerY, event.clientX, event.clientY, event.ctrlKey, event.altKey,
        event.shiftKey, event.metaKey, event.button, event.relatedTarget);
        ui.dispatchEvent(eventCopy);
        return false;
    }
}
});

Posting my answer because I couldn't find the answer anywhere else-
I had problems you are describing, and I solved it this way..
position the helper (it will try to get reset to 0,0)
Then we return false before it is reset to 0,0
It is canceled and at the correct position, but then we restart the drag by copying the event that was used to initiate the drag.

$(" #container").droppable({
drop: function (event, ui) {
    $(ui.draggable).detach().css({
        top: 0,
        left: 0
    }).appendTo(this);

}
});

$(" #draggable").draggable({
start: function (event, ui) {
    if ($(event.target).parent().is('.ui-droppable')) {
        var x = ($(this).offset().left);
        var y = ($(this).offset().top);
        var p = $(event.target).parent().parent();
        $(event.target).detach().insertAfter(p);
        $(ui.helper).css({
            'left': x - $(event.target).offset().left,
            'top': y - $(event.target).offset().top
        });
        var eventCopy = document.createEvent("MouseEvents");
        eventCopy.initMouseEvent(event.type, event.bubbles, event.cancelable, event.view, event.detail,
        event.pageX || event.layerX, event.pageY || event.layerY, event.clientX, event.clientY, event.ctrlKey, event.altKey,
        event.shiftKey, event.metaKey, event.button, event.relatedTarget);
        ui.dispatchEvent(eventCopy);
        return false;
    }
}
});
岁月如刀 2024-12-05 22:39:20

对于 jquery,您可以尝试使用 event.pageX 和 event.pageY,如此处所述。

for jquery you can try using event.pageX and event.pageY as explained here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文