17

使用 jQuery,我有一个可拖动的元素。这是一个大小为 200 x 40 的 div。当然,用户可以通过单击 div 中的不同位置开始拖动此 div。我想要的是当 startdrag 事件发生时,帮助器(克隆)div 将始终以相同的方式与光标对齐,无论用户在 div 中的哪个位置开始拖动。

所以在 mousedown 之后,助手的 top 和 left 值需要与鼠标 x 和 y 相同。我用这个咖啡脚本代码试过这个:

onStartDrag: ( e, ui ) =>
    ui.helper.css
        left: e.clientX
        top: e.clientY

    console.log( e )

但它不起作用,我猜这是因为我输入的值由于鼠标移动而直接被可拖动插件覆盖。

有任何想法吗?

4

5 回答 5

39

在尝试了 Amar 的答案并意识到它破坏了与 的交互之后droppable,我深入挖掘,发现有一个专门支持这个的选项,称为cursorAt.

$('blah').draggable
  helper: ->
    ... custom helper ...
  cursorAt:
    top: 5
    left: 5

这会将助手的左上角放置在光标左上方 5 个像素处,并与droppable.

http://api.jqueryui.com/draggable/#option-cursorAt

让我们在应得的地方给予信任。谢谢,jquery-ui 邮件列表档案!

https://groups.google.com/forum/#!topic/jquery-ui/Evb94G_QvNw

于 2013-09-25T22:53:35.263 回答
15

试试这样设置,

       start: function (event, ui) {
                $(ui.helper).css("margin-left", event.clientX - $(event.target).offset().left);
                $(ui.helper).css("margin-top", event.clientY - $(event.target).offset().top);
            }

看看这个jqFAQ.com,它对你会更有帮助。

于 2012-11-05T13:38:28.810 回答
0

我已经找到了一个解决方法,这很容易,如果您使用可排序插件,您可以像这样修复辅助位置:

sort: function(e, ui) {
    $(".ui-sortable-handle.ui-sortable-helper").css({'top':e.pageY});
}
于 2015-01-03T01:22:26.003 回答
0

我同意@roverv。

这对我来说很好。

滚动页面后鼠标光标后的图标示例

$('.js-tire').draggable
      tolerance: 'fit',
      appendTo: 'body',
      cursor: 'move',
      cursorAt:
        top: 15,
        left: 18
      helper: (event) ->
        $('<div class="tire-icon"></div>').append($('<img src="/images/tyre_32_32.png" />'))
      start: (event, ui) ->
        if $(event.target).hasClass 'in-use'
          $('.js-send-to-maintenance-box').addClass 'is-highlighted'
        else
          $('.ui-droppable').addClass 'is-highlighted'
      stop: (event, ui) ->
        $('.ui-droppable')
          .removeClass 'is-highlighted'
          .removeClass 'is-dragover'
于 2019-04-11T14:44:25.080 回答
-1

这对我有用:

附加到:“正文”

像这样:

$(this).draggable({
    helper: "clone",
    cursor: "move",
    appendTo: 'body'
});
于 2017-01-10T09:09:32.510 回答