前端最基础的就是 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"
用来标识这是一个可拖拽点。