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

相關文章
相關標籤/搜索