jquery-ui-sortable 的拖动事件

Posted

技术标签:

【中文标题】jquery-ui-sortable 的拖动事件【英文标题】:drag event for jquery-ui-sortable 【发布时间】:2011-12-30 04:39:07 【问题描述】:

jquery-ui-sortable被拖拽时如何监听drag事件?

通过 hit-n-trial 策略,我尝试了来自 jquery-ui-draggabledrag 事件,但它不起作用。

$('.widget_container').sortable(
    drag: function(event, ui)  console.log('drag'); 
);

【问题讨论】:

【参考方案1】:

为此目的使用sort事件:

$(".sortable").sortable(
    sort: function(e) 
      console.log('X:' + e.screenX, 'Y:' + e.screenY);
    
);

http://jsbin.com/kegeb

【讨论】:

如此明显,我已经看到了……哈哈。完美!【参考方案2】:

如果您需要在用户开始拖动时处理该事件,您应该使用handle而不是sort

$(".sortable").sortable(
    handle: function(e) 
      console.log('Handled');
    
);

此事件将在拖动开始时以及页面加载时发生 (http://api.jqueryui.com/sortable/#option-handle)。

我建议您也检查一下这个答案,它解释了更新列表时处理元素的正确方法:Get order of list items in a jQuery Sortable list after resort

祝你好运

【讨论】:

我尝试了'handle'方法,发现它无法区分点击和拖动,并且奇怪的是禁用了点击排序功能。 "Handle" 在点击后调用,而不是在开始拖动后调用。不是很有用。【参考方案3】:

在文档上说你应该使用“排序”而不是“拖动”。

http://api.jqueryui.com/sortable/#option-forcePlaceholderSize

【讨论】:

【参考方案4】:

事件按此顺序进行:

    “句柄”- 向下点击 “start”——开始拖拽——你可以在这里添加一个类 “激活” “排序” - 更改项目位置 "change" – 更改项目顺序 “beforeStop” - 释放鼠标按钮 “停用” “出” "stop" - 你可以在这里删除一个类
    $(function() 
      $("#sortable").sortable();
      $("#sortable").disableSelection();
      $("#sortable").sortable(
        axis: "y"
      );
    
      $("#sortable").sortable(
        handle: function(event, ui) 
          console.log("handle")
        
      );
    
      $("#sortable").sortable(
        activate: function(event, ui) 
          console.log("activate")
        
      );
    
      $("#sortable").sortable(
        beforeStop: function(event, ui) 
          console.log("beforeStop")
        
      );
    
      $("#sortable").sortable(
        change: function(event, ui) 
          console.log("change")
        
      );
    
      $("#sortable").sortable(
        create: function(event, ui) 
          console.log("create")
        
      );
    
      $("#sortable").sortable(
        deactivate: function(event, ui) 
          console.log("deactivate")
        
      );
    
      $("#sortable").sortable(
        out: function(event, ui) 
          console.log("out")
        
      );
    
      $("#sortable").sortable(
        over: function(event, ui) 
          console.log("over")
        
      );
    
      $("#sortable").sortable(
        receive: function(event, ui) 
          console.log("receive")
        
      );
    
      $("#sortable").sortable(
        remove: function(event, ui) 
          console.log("remove")
        
      );
    
      $("#sortable").sortable(
        sort: function(event, ui) 
          console.log("sort")
        
      );
    
      $("#sortable").sortable(
        start: function(event, ui) 
          console.log("start");
          ui.item.addClass("dragged");
        
      );
    
      $("#sortable").sortable(
        stop: function(event, ui) 
          console.log("stop")
          ui.item.removeClass("dragged");
        
      );
    
      $("#sortable").sortable(
        update: function(event, ui) 
          console.log("update")
        
      );
    );
    
    
    $("#sortable").on("click", "li", function() 
      console.log("click");
    );
    #sortable 
      list-style-type: none;
      margin: 0;
      padding: 0;
    
    
    #sortable li 
      margin-bottom: 0.25em;
      padding: 0.5em;
      border: 1px solid black;
    
    
    #sortable .dragged 
      border-color: red;
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <ul id="sortable">
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
      <li>Item 4</li>
      <li>Item 5</li>
      <li>Item 6</li>
      <li>Item 7</li>
    </ul>

【讨论】:

以上是关于jquery-ui-sortable 的拖动事件的主要内容,如果未能解决你的问题,请参考以下文章

JQuery-UI-sortable基础使用和详参

React dropzone-将文件拖动到dropzone上时触发dragLeave事件

无法在 Firefox 中拖动按钮元素

JQuery EasyUI---Draggable( 拖动) 组件

Android 事件分发ItemTouchHandler 实现拖动排序 ( 设置滑动方向 | 启启用长按拖动功能 | 拖动距离判定 | 设置拖动触发操作 )

由于拖动事件中的 DOM 操作,HTML5 可拖动的放置事件不会间歇性触发