1

我正在创建某种地图编辑器,我希望能够从侧边栏中单击可用的图像,它会出现在光标下方并跟随鼠标图标,所以基本上是拖动图像,但我想要原图留在原地。

我将如何在 jQuery 中实现这一点(最好)?

4

3 回答 3

3

使用 jQuery UI 试试这个:

HTML:

<ul>
    <li id="draggable" class="ui-state-highlight">Your Image</li>
</ul>

<ul id="sortable">
    <li class="ui-state-default">Item 1</li>
    <li class="ui-state-default">Item 2</li>
    <li class="ui-state-default">Item 3</li>
    <li class="ui-state-default">Item 4</li>
    <li class="ui-state-default">Item 5</li>
</ul>​

脚本:

$(function() {
    $( "#sortable" ).sortable({
        revert: true
    });
    $( "#draggable" ).draggable({
        connectToSortable: "#sortable",
        helper: "clone",
        revert: "invalid"
    });
    $( "ul, li" ).disableSelection();
});​

在这里,我还创建了小提琴http://jsfiddle.net/aanred/b3QFN/。您还可以在此处阅读文档http://jqueryui.com/draggable/

于 2012-11-29T00:55:43.933 回答
1

我认为,jquery ui可拖动对象会帮助你

于 2012-11-29T00:42:51.020 回答
1

这是我的解决方案,在此示例中,我正在拖动一个 div,但您可以轻松检查 img 子项,此代码可防止放入多个项目(通过取出条件轻松修改),具有可选回调参数,以便您可以对刚刚删除的对象执行某些操作(例如从 rel 属性中读取等)

refreshDragDrop = function(dragClassName,dropDivId, callback) {
  $( "." + dragClassName ).draggable({
    connectToSortable: "#" + dropDivId,
    helper: "clone",
    revert: "invalid"
  });
  $("#" + dropDivId).droppable({
    accept: '.' + dragClassName,
    drop: function (event, ui) {
      var $this = $(this),
        maxItemsCount = 1;
      if ($this.children('div').length == maxItemsCount ){
        //too many items,just replace
        $(this).html($(ui.draggable).clone());
      } else {
        $(this).append($(ui.draggable).clone());
      }
      if (typeof callback == "function") callback($this.children('div'));
    }
  });
}
于 2016-01-28T22:43:07.227 回答