Vue結合HTML5拖放API 實現目錄拖拽~

dxhsmwqc發表於2018-01-12

拖放事件

dom被拖拽--->經過一些dom--->到達指定dom

  • 被拖拽的dom:(源物件)

    dragstart 源物件被拖拽

    drag 源物件拖拽過程中

    dragend 源物件拖拽結束(drop事件後執行)

  • 拖拽過程中經過的dom:(過程物件)

    dragenter 源物件進入過程物件

    dragover 源物件在過程物件中移動 (設定event.preventDefault(),否則drop事件不會執行)

    drageleave 源物件離開過程物件

  • 拖拽到達指定的dom:(目標物件)

    drop 拖放到指定目標物件內

  • dataTransfer物件:(拖拽過程中資料傳遞物件)

    setData()存入資料

      支援格式:text/plain、text/html、text/xml、text/url-list
    複製程式碼

    getData()

    clearData()

實現

實現目錄可在同級、子級拖動

思路:
  1. 在dragstart時向dataTransfer物件存入源物件的資料
  2. 在dragenter時給過程物件加同級拖拽標識

p1bVVP.jpg

  1. 在dragenter時同時記錄下進入時滑鼠的座標(x1, y1)

  2. 當dragover時依然記錄下滑鼠的座標(x2, y2)

  3. 設定規則加子級拖拽標識,例如:Math.abs(x2-x1) > 50

p1bOzQ.jpg

  1. 當dragleave時,去掉所有標識
  2. 當drop時,獲取dataTransfer物件的資料,並更新拖拽資料
  3. 當dragend時,去掉所有標識

效果

  1. 拖拽到子級

p1qz1e.jpg

2.拖拽到同級

p1Ly9O.jpg

此例子是結合vue遞迴元件實現:vue-drag

相關文章