jquery-ui sortable 使用实例

jquery-ui sortable 使用实例

最近公司须要作任务看板,须要拖拽效果。点击查看效果。因为网站是基于vue的技术栈,最开始找了一个现成的vue封装的拖拽组件:Vue.Draggable,该组件是基于sortable封装的。可是因为使用的原生html5的拖拽属性,致使拖拽过程有透明度,并且不能修改透明度和倾斜度,达不到产品的要求(产品要求模仿worktile的使用体验)。同时我也看了同行不少相似的看板效果,都有倾斜度和非透明,经研究,采用的jquery-ui的sortable。因此,死皮赖脸的选择jquery-ui的sortable来操做,实际上是极不情愿的使用:由于基于jQuery的,jQuery占空间太大。但因为是pc端,也还能够接受。css

在开发以前,能够先看jquery-ui的sortable的官方文档国人整理的文档的一些实例html

  • 引入jquery库和jquery-ui库
// 引入样式文件
<link rel="stylesheet" href="https://static.clouderwork.com/task/static/js/jquery-ui.min.css">
// 引入jquery 库
<script src="https://static.clouderwork.com/task/static/js/jquery.min.js"></script>
// 引入jquery-ui库
<script src="https://static.clouderwork.com/task/static/js/jquery-ui.min.js"></script>
  • 使用实例代码
// 初始化拖拽
initSort () {
      // 拖拽时开始滚动的间距
      var scrollingSensitivity = 20
      // 拖拽时滚动速度
      let scrollingSpeed = 20
      // 拖拽前的父级节点
      let dragBeforeParentNode = null
      // 初始化拖拽函数
      $('.task-lists').sortable({
	    // 自适应placeholder的大小
        forceHelperSize: true,
        // 拖拽时的鼠标形状
        cursor : '-webkit-grabbing',
        // 拖拽的父级节点(该节点必定要注意,配置错误会致使当前屏幕外的元素无法自动滚动拖拽,两列之间拖拽的滚动也会出问题)
        appendTo: '.drag-task',
        // 拖拽时的倾斜度
        rotate: '5deg',
        // 延迟时间(毫秒),避免和click同时操做时出现的冲突
        delay: 150,
        // 以clone方式拖拽
        helper: 'clone',
        // 拖拽到边框出现滚动的间距,
        scrollSensitivity:scrollingSensitivity,
        // 应用于拖拽空白区域的样式
        placeholder: 'portlet-placeholder ui-state-highlight',
        // 容许拖拽预留空白区域
        forcePlaceholderSize: true,
        // 多个列表之间的拖拽的dom元素
        connectWith: '.task-lists',
        // 拖拽结束函数
        stop: (e, ui) => {
	      // 当前拽入的元素
          let item = $(ui.item)
          // 当前拽入元素的下标
          let index = item.index()
          let kid = ''
          // xxxx 这里面能够操做数据更新
        },
        // 开始拖拽时的函数
        start: (e, ui) => {
	      // 拖拽前的父级节点
          dragBeforeParentNode = ui.item[0].parentNode
          // 让placeholder和源高度一致
	       ui.placeholder.height(ui.helper[0].scrollHeight).width(258)
	       // xxxx  这里能够记录一些拖拽前的元素属性
        },
        // 处理两列滚动条问题
        sort:function(event, ui){
          var scrollContainer = ui.placeholder[0].parentNode
          // 跨列拖拽的状况
          if (dragBeforeParentNode && dragBeforeParentNode.id !== scrollContainer.id) {
            // 设置拽入的列表的滚动位置
            var overflowOffset = $(scrollContainer).offset()
            if((overflowOffset.top + scrollContainer.offsetHeight) - event.pageY < scrollingSensitivity) {
              scrollContainer.scrollTop = scrollContainer.scrollTop + scrollingSpeed
            } else if(event.pageY - overflowOffset.top < scrollingSensitivity) {
              scrollContainer.scrollTop = scrollContainer.scrollTop - scrollingSpeed
            }
          }
        }
      }).disableSelection()

在开发的时候必定要多看文档,了解其属性的含义会事半功倍,顺延解决问题。
下面给一个实例供参考:jquery-ui-sortable 实例, 源代码在github上面,地址vue

相关文章
相关标签/搜索