美文网首页JQuery
jqueryUI-draggable-droppable实现多元

jqueryUI-draggable-droppable实现多元

作者: sherleysong | 来源:发表于2019-04-29 17:22 被阅读1次

应用场景

  • 痛点:

基于jqueryUI,默认的拖动只能对当前被点击的元素进行拖拽,不能实现多选拖拽。
拖动如果是对目标元素一个个的拖动,效率低下,操作不友好。

  • 解决方案:
    针对一批被识别的元素的拖放,可以快速批量的将该批人直接一次性拖入日历,提高效率,优化操作流程。
原理图.png 实现效果.png

第一步,设置可拖动的元素

  1. 使用选项 helper 创建一个空div
  2. 针对事件 start,第一个参数获取当时拖拽的DOM,第二个参数获取helper创建的空div,也就是拖拽时的div。
  3. 第二个参数将选中的需要被拖拽的元素们选出来,然后append到helper创建的空div里,即可实现拖出一份一模一样的DOM。
  4. 前提是,需要用个特殊的class来标记这些可被拖拽的元素(这里是ui-draggable-active) 也就是拖拽开始时,将ui-draggable-active的元素都复制一遍,当然也包括被拖拽的自己。

————代码———

  // A区域的列表们,允许被拖拽
  $('#partA li').draggable({
    // 拖动开始时,创建一个空的C区域
    helper: function(event, ui) {
      return $('<div id="partC"></div>') // 创建空的C区域
    },
    // 拖动开始时,识别A区域中可被拖动的元素,并添加到C区域
    start: function(event, ui) {
      // 借用数组遍历方法处理DOM
      Array.prototype.forEach.call(
        $('#partA li.active'), // 识别A区域的被选中的列表们,标记了.active
        function(ele, index) {
          ui.helper.append($(ele).clone(true)) // 一次将A区域的被选中的列表添加到C区域
        }
      )
    },
  })

第二步,被拖入元素的DOM设置droppable

  1. accept参数设置可接受的元素
  2. tolerance参数设置为 'touch', 可控制碰到目标DOM即可生效,不用全部拖入才有用,对DOM很大很多的情况下有用。
  3. drop参数用于控制放下后的回调事件。

——— 代码 ———

  // B区域接受拖入
  $('#partB').droppable({
    accept: '.active', // 接受来自A区域的选中的list
    tolerance: 'touch', // 该参数用于控制拖拽只要接触到B区域即可生效。
    drop: function() {
      // 处理拖放结束后的逻辑,TODO...  
      // 举例,将A区域内选中的元素(也是C区域内的元素)复制一份放入B区域内。
      $('#partB').append($('#partC li.active'))
    },
  })

其他说明:

  • 多元素的复制拖拽(三步主流程)
  1. 设置A区域内的元素可被拖动。
  2. 设置B区域可接受来自A区域内的这些子元素。
  3. 拖动开始时,将A区域内的选中状态的元素(即需要被拖动的目标元素)复制一份。
  • 多元素的复制拖拽的其他配合
  1. 需标记A区域内可被拖动的子元素(即区分被选中的和未被选中的元素)
  2. 需保证A区域内被拖动的子元素样式独立性(在复制这些元素时即可完整复制)
  • 其他
  1. 所以如果B区域放下的内容需要依赖A区域的内容(如顺序第几个),则需要排除掉末尾的C区域内容。原因是C区域的内容,会生成在A区域末尾。
  2. C区域的更多逻辑,应写在B区域droppable的drop方法里。
  3. C区域如需排序,可依赖jqueryUI的sortable交互方法。
  4. A区域支持多选的方案是相对独立的另一个功能。
  5. 判断点击时是否按住了shift、ctrl键来处理是否多选选中等。
  • PS : 配合connectToSortable, 可以实现droppable元素的被插入。

相关文章

  • jqueryUI-draggable-droppable实现多元

    应用场景 痛点: 基于jqueryUI,默认的拖动只能对当前被点击的元素进行拖拽,不能实现多选拖拽。拖动如果是对目...

  • Vue动画之三: 多元素 、多组件

    今天给大家, 介绍一下, 怎样在Vue中实现多元素和多组件的动画。1、多元素实现的代码注意: transition...

  • 实现多元线性回归

    多元线性回归的实现下面我们来使用python代码实现多元线性回归: 其实在代码中,思想很简单,就是使用公式即可。其...

  • 各类统计方法R语言实现(六)

    今天是各类统计方法R语言实现的第六期,我们主要介绍多元线性回归、回归诊断。 多元线性回归 多元线性回归指的是用多个...

  • 抢!20元买100+购物攻略!

    今天我们的主角是饿了么,通过几个操作多重叠加以后实现常规20多元买100多元,极限可以达到10元买100多元,商超...

  • 第三天 多元线性回归

    多元线性回归 多元线性回归旨在用现有的数据构建两个或多个因变量与一个因变量之间的相关模型 多元线性回归的实现步骤和...

  • 多元线性回归-matlab实现

    多元线性回归regress[b,bint,r,rint,stats] = regress(y,x, alpha)b...

  • java实现多元线性回归

    [TOC] 一个例子 约翰逊过滤股份公司对遍布南佛罗里达州的水过滤系统提供维修保养服务。当顾客的水过滤系统出现故障...

  • 【读书清单】跃迁(二)

    ① 专注和多元并不冲突,实现目标需要专注力,在通往目标的路上需要多元的手段。 ② 专业并不是读了多少本书,知道多少...

  • RecycleView

    不同的viewholder实现item的多元化,但是没有像ListView中的onItemClickListene...

网友评论

    本文标题:jqueryUI-draggable-droppable实现多元

    本文链接:https://www.haomeiwen.com/subject/xqhunqtx.html