前端最基礎的就是 HTML+CSS+Javascript
。掌握了這三門技術就算入門,但也僅僅是入門,如今前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS
),本着提高技術水平,打牢基礎知識的中心思想,咱們開課啦(每週四)。html
其實在以前就寫過一篇拖拽相關的內容。今天簡單說說吧。拖拽想要實現分爲兩種形式:前端
drag
API 實現jquery
測試地址segmentfault
var drapDOM = null; window.addEventListener('mousedown', function(e){ if(e.target.classList.contains('drap')){ drapDOM = e.target; } }) window.addEventListener('mousemove', function(e){ if(drapDOM){ drapDOM.style.position = 'fixed'; drapDOM.style.pointerEvents = 'none'; drapDOM.style.left = e.clientX + 'px' drapDOM.style.top = e.clientY + 'px' console.log(e) } }) window.addEventListener('mouseup', function(e){ console.log(e.target) if(drapDOM){ drapDOM.style.position = 'initial'; drapDOM.style.pointerEvents = 'initial'; drapDOM.style.left = '0' drapDOM.style.top = '0'; if(drapDOM.parentNode != e.target){ e.target.appendChild(drapDOM) } drapDOM = null } })
drapDOM.style.pointerEvents = 'none'
防止副本干擾e.target
drag
API 實現先說說有什麼好處微信
動做週期的事件,能夠方便的區分出(目標對象與源對象)app
ondragstart
:源對象開始被拖動ondrag
:源對象被拖動的過程當中ondragend
:源對象被拖動結束ondragenter
:目標對象被源對象拖動進入ondragover
:目標對象被源對象懸浮在上面ondragleave
:源對象拖動着離開了目標對象ondrop
:源對象拖動着在目標對象上方鬆手數據傳遞:框架
e.data.Transfer.setData(k,v)//k-v必須都是string類型
e.data.Transfer.getData(k,v)
測試地址函數
draggable="true"
)dragstart
記錄當前拖拽點drop
、dragover
阻止默認事件,防止(打開、不能拖拽)drop
判斷若是拖拽點不在放置點內(if(!$(ev.target).find(dragged).length){
)就追加var dragged; function allowDrop(ev){ // console.log('allowDrop', ev) ev.preventDefault(); } function drag(ev){ // console.log('drag', ev) } function drop(ev){ console.log('drop', ev) ev.preventDefault(); if(!$(ev.target).find(dragged).length){ $(ev.target).append(dragged) } } function dragstart(ev){ dragged = ev.target; } $(function(){ $('ul').off().on('drop', drop).on('dragover', allowDrop) $('li[draggable="true"]').off().on('drag', drag).on('dragstart', dragstart) })
drop
、dragover
阻止默認事件,防止(打開、不能拖拽)draggable="true"
用來標識這是一個可拖拽點。