JSFiddle - React, Tailwind, and code Playground
by Andy You
HTML
<div class="columns">
<div class="column" draggable="true" id="col-1">
<header>A</header>
</div>
<div class="column" draggable="true" id="col-2">
<header>B</header>
</div>
<div class="column" draggable="true" id="col-3">
<header>C</header>
</div>
</div>
SCSS
/**
* 防止可以被拖移的元素內部的文字被選取造成局部拖移
*/
[draggable] {
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
/**
* 舊版 WebKit 需要此設定讓元素可以被拖移
*/
-khtml-user-drag: element;
-webkit-user-drag: element;
}
.column {
height: 150px;
width: 150px;
float: left;
border: 1px solid #ccc;
background-color: pink;
margin-right: 5px;
text-align: center;
cursor: move;
header {
text-shadow: #fff 0 1px;
box-shadow: 5px;
}
&.over {
border: 2px dashed gray;
}
}
Babel + JSX
var columns = document.querySelectorAll('.columns .column')
;[...columns].forEach( (col) => {
col.addEventListener('dragstart', dragStart, false)
col.addEventListener('dragover', dragOver, false)
col.addEventListener('dragenter', dragEnter, false)
col.addEventListener('dragleave', dragLeave, false)
})
function dragStart (e) {
this.style.opacity = 0.4
}
function dragOver (e) {
if (e.preventDefault) {
// 觸發 drop 需要這行
e.preventDefault()
}
e.dataTransfer.dropEffect = 'move'
return false
}
function dragEnter (e) {
console.log('enter')
this.classList.add('over')
}
function dragLeave (e) {
this.classList.remove('over')
}