HTML5:drag & drop API
綁定在拖拽目標(biāo)
Evnet | Description |
---|---|
dragstart | 當(dāng)用戶開(kāi)始拖拽一個(gè)元素或者一個(gè)文本選取區(qū)塊的時(shí)觸發(fā) |
drag | 當(dāng)用戶正在拖拽一個(gè)元素或者一個(gè)文本選取區(qū)塊的時(shí)觸發(fā) |
dragend | 當(dāng)用戶結(jié)束拖拽一個(gè)元素或者一個(gè)文本選取區(qū)塊的時(shí)觸發(fā) |
綁定在放置目標(biāo)
Evnet | Description |
---|---|
dragenter | 當(dāng)一個(gè)元素或文字選取區(qū)塊被拖曳移動(dòng)進(jìn)入一個(gè)有效的放置目標(biāo)時(shí)觸發(fā) |
dragover | 當(dāng)一個(gè)元素或文字選取區(qū)塊被拖曳移動(dòng)經(jīng)過(guò)一個(gè)有效的放置目標(biāo)時(shí)觸發(fā) |
dragleave | 當(dāng)一個(gè)元素或文字選取區(qū)塊被拖曳移動(dòng)離開(kāi)一個(gè)有效的放置目標(biāo)時(shí)觸發(fā) |
dragexist | 當(dāng)一個(gè)元素不再是被選取中的拖曳元素時(shí)觸發(fā) |
drop | 當(dāng)一個(gè)元素或文字選取區(qū)塊被放置至一個(gè)有效的放置目標(biāo)時(shí)觸發(fā) |
實(shí)操
編寫(xiě)代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>HTML5 drag and drop</title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
#main{
width: 300px;
height: 200px;
box-sizing: border-box;
padding: 10px;
margin: 10px;
border:2px solid #fd4d4d;
}
.list{
margin: 10px;
font-size: 0;
}
.list li,
#main li{
display: inline-block;
width: 30px;
height: 30px;
margin-right: 10px;
line-height: 30px;
border-radius: 100%;
text-align: center;
background: #58a;
color: #fff;
font-size: 16px;
}
</style>
</head>
<body>
<ul id="main"></ul>
<ul class="list">
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
</body>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var ELE = '';
var NUB = '';
//拖放元素設(shè)置draggable屬性
$('.list').find('li').attr('draggable', true);
//拖放元素綁定dragstart, dragend事件
$('.list').on({
'dragstart': function(e){
ELE = $(this);
NUB = ELE.parents().children('li').length;
var _data = parseDom(e.target);
//dataTransfer.setData儲(chǔ)存數(shù)據(jù)(使用 jquery 時(shí)要加上originalEvent)
e.originalEvent.dataTransfer.setData("text/plain", _data);
ELE.css('opacity', '0.5');
},
'dragend': function(e){
$('.list').find('li').length === NUB?ELE.css('opacity', '1'):'';
}
}, 'li');
//目標(biāo)元素綁定dragover, drop事件
$('#main').on({
'dragover': function(e){
e.originalEvent.preventDefault();
},
'drop': function(e){
e.originalEvent.preventDefault();
//dataTransfer.getData讀取數(shù)據(jù)
var _ele = e.originalEvent.dataTransfer.getData("text/plain");
$(this).append(_ele);
ELE.remove();
}
});
});
//DOM轉(zhuǎn)string
function parseDom(node) {
var tmpNode = document.createElement( "div" );
tmpNode.appendChild( node.cloneNode( true ) );
var str = tmpNode.innerHTML;
tmpNode = node = null;
return str;
};
</script>
</html>
總結(jié)
drag & drop 帶來(lái)的應(yīng)用場(chǎng)景盏筐,遠(yuǎn)不止這些,還有待探索砸讳。