HTMLElement: drag ã¤ãã³ã
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
drag ã¤ãã³ãã¯ãè¦ç´ ã鏿ãããããã¹ããã¦ã¼ã¶ã¼ããã©ãã°ãã¦ããéã«ãæ°ç¾ããªç§ãã¨ã«çºçãã¾ãã
ãã®ã¤ãã³ãã¯ãã£ã³ã»ã«å¯è½ã§ãDocument ãªãã¸ã§ã¯ã㨠Window ãªãã¸ã§ã¯ãã¾ã§ããã«ã¢ããããå¯è½æ§ãããã¾ãã
æ§æ
ãã®ã¤ãã³ãåã addEventListener() ã®ãããªã¡ã½ããã§ä½¿ç¨ããããã¤ãã³ããã³ãã©ã¼ããããã£ãè¨å®ããããã¾ãã
addEventListener("drag", (event) => {});
ondrag = (event) => {};
ã¤ãã³ãå
ã¤ãã³ãããããã£
以ä¸ã«æããããããã£ã«å ãã¦ã親ã§ãã Event ããç¶æ¿ããããããã£ãããã¾ãã
DragEvent.dataTransferèªåå°ç¨-
ãã©ãã°ï¼ããããæä½ã®éã«è»¢éããããã¼ã¿ã§ãã
ä¾
>ãã©ãã°ï¼ããããã®ä¾
HTML
<div class="dropzone">
<div id="draggable" draggable="true">ãã® div ã¯ãã©ãã°å¯</div>
</div>
<div class="dropzone" id="droptarget"></div>
CSS
body {
/* ãã®ä¾ã®ä¸ã§ã¦ã¼ã¶ã¼ã«ããããã¹ãã®é¸æã鲿¢ãã */
user-select: none;
}
#draggable {
text-align: center;
background: white;
}
.dropzone {
width: 200px;
height: 20px;
background: blueviolet;
margin: 10px;
padding: 10px;
}
.dropzone.dragover {
background-color: purple;
}
.dragging {
opacity: 0.5;
}
JavaScript
let dragged;
/* ãã©ãã°å¯è½ãªã¿ã¼ã²ããä¸ã§çºçããã¤ãã³ã */
const source = document.getElementById("draggable");
source.addEventListener("drag", (event) => {
console.log("dragging");
});
source.addEventListener("dragstart", (event) => {
// ãã©ãã°ä¸ã®è¦ç´ ã®åç
§ãä¿å
dragged = event.target;
// åéæã«ãã
event.target.classList.add("dragging");
});
source.addEventListener("dragend", (event) => {
// éæåº¦ãè§£é¤
event.target.classList.remove("dragging");
});
/* ãããã対象ã«çºçããã¤ãã³ã */
const target = document.getElementById("droptarget");
target.addEventListener(
"dragover",
(event) => {
// ããããã§ããããã«æ¢å®ã®åä½ã忢
event.preventDefault();
},
false,
);
target.addEventListener("dragenter", (event) => {
// ãã©ãã°å¯è½ãªè¦ç´ ãããããå
ã«å
¥ã£ãã¨ãã«ãããããå
ã®åè£ã強調表示ãã
if (event.target.classList.contains("dropzone")) {
event.target.classList.add("dragover");
}
});
target.addEventListener("dragleave", (event) => {
// ãã©ãã°å¯è½ãªè¦ç´ ãããããå
ããé¢ããã¨ãã«ãããããå
ã®åè£ã®èæ¯ããªã»ãããã
if (event.target.classList.contains("dropzone")) {
event.target.classList.remove("dragover");
}
});
target.addEventListener("drop", (event) => {
// æ¢å®ã®åä½ï¼ä¸é¨ã®è¦ç´ ã§ãªã³ã¯ã¨ãã¦éãï¼ãè¡ããªãããã«ããã
event.preventDefault();
// ãã©ãã°ããè¦ç´ ã鏿ãããããããã¿ã¼ã²ããã«ç§»åãã
if (event.target.classList.contains("dropzone")) {
event.target.classList.remove("dragover");
event.target.appendChild(dragged);
}
});
çµæ
仿§æ¸
| 仿§æ¸ |
|---|
| HTML > # handler-ondrag > |
| HTML > # event-dnd-drag > |