如何让Jquery UI的Droppable在其左上角进入时接受一个Draggable?

时间:2018-01-22 21:53:22

标签: javascript jquery jquery-ui jquery-ui-draggable jquery-ui-droppable

经过一些测试后,当Draggable的中心位于Droppable中时,我的Droppable元素只接受Draggable元素。

当左上角位于Droppable内时,如何更改此行为以接受Draggable?

注意:可拖动量大于Droppables。

1 个答案:

答案 0 :(得分:1)

也许droppable's tolerance option的某些非默认值可能是您的不错选择,尽管它们不会完全符合您的要求。

来自文档:

  

指定用于测试拖动器是否悬停在droppable上的模式。可能的值:

     
      
  • "fit":Draggable完全覆盖了droppable。
  •   
  • "intersect":Draggable在两个方向上至少重叠50%的droppable。
  •   
  • "pointer":鼠标指针与droppable重叠。
  •   
  • "touch":Draggable可以重叠任何金额。
  •   

默认值为"intersect"。我会考虑使用"pointer""touch"

或者,如果您确实需要使用左上角作为参考,那么您应该覆盖$.ui.intersect,这是根据公差检查可拖动和可拖放是否相交的函数模式。如果他们这样做,它应该返回true,否则返回false。它看起来像这样:

$.ui.intersect = function (draggable, droppable, toleranceMode) {

    swtich(toleranceMode) {
        // Check if they intersect based on the selected mode.
        default:
            return false;
    }
}

您需要重新定义该功能并添加自定义case块,同时保留原始模式。否则,依赖于它的代码的其他一些部分(可能是其他一些jQuery UI组件)将会中断。

但是,这只适用于jQuery UI< 1.12。如果您使用的是较新版本,则必须覆盖其他一些方法。您可以在此处找到代码示例的详细答案:Build the matching option for jQuery UI Droppable's Intersect tolerance