以ä¸ã¯ããã©ãã° & ããããæä½ãè¡ãããæã®å段éã«ã¤ãã¦ã®è§£èª¬ã§ãã
ã¡ã¢: ãã®ææ¸ã§è¨è¿°ããã¦ãããã©ãã°æä½ã¯ DataTransfer
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ç¨ãã¾ãããã®ææ¸ã§ã¯ DataTransferItem
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã DataTransferItemList
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯èª¬æãã¾ããã
ã¦ã§ããã¼ã¸ã«ããã¦ã¯ãæ¢å®ã®ãã©ãã° & ããããã®æåã使ãããå ´åãããã¤ãããã¾ããæååã®é¸æç¯å²ãç»åããªã³ã¯ãªã©ã®ãã©ãã°ãªã©ãããã«ãããã¾ããç»åããªã³ã¯ããã©ãã°ãããæã¯ãç»åãããã¯ãªã³ã¯å ã® URL ããã©ãã°ãã¼ã¿ã¨ãã¦è¨å®ããããã©ãã°æä½ãå§ã¾ãã¾ãããã®ä»ã®è¦ç´ ã¯ãæ¢å®ã®ãã©ãã°æä½ãè¡ãããããã«ã¯é¸æç¯å²ã«å«ã¾ãã¦ããªããã°ãªãã¾ãããå®éã®æ§åã確èªããã«ã¯ãã¦ã§ããã¼ã¸ã®ä¸é¨ã鏿ãã¦ããã®ä¸ã§ãã¦ã¹ã®ãã¿ã³ãæ¼ä¸ãããã®ã¾ã¾é¸æç¯å²ããã©ãã°ãã¦ãã ããããã©ãã°ä¸ã鏿ç¯å²ã®å 容ãåéæã§æç»ããç©ããã¦ã¹ãã¤ã³ã¿ã¼ã«ä¼´ã£ã¦è¡¨ç¤ºãããã§ãããããã ããã®æåã¯ããã©ãã°ããããã¼ã¿ãå å·¥ããã¤ãã³ããªã¹ãã¼ãåå¨ããªãå ´åã®ãæ¢å®ã®ãã©ãã°ã®æåã«ãããã®ã§ãã
HTML ã§ã¯ãç»åããªã³ã¯ã鏿ç¯å²ã®ä¸ã§ã®æ¢å®ã®åä½ãé¤ãã¨ãæ¢å®ã§ãã©ãã°å¯è½ãªä»ã®è¦ç´ ã¯ããã¾ããã
ä¸è¨ä»¥å¤ã®ä»ã® HTML è¦ç´ ããã©ãã°ã§ããããã«ããã«ã¯ã以ä¸ã® 3 ã¤ã®ãã¨ãããªãã¦ã¯ãªãã¾ããã
draggable
屿§ã®å¤ã "true"
ã«è¨å®ãããdragstart
ã¤ãã³ãã«ãªã¹ãã¼ãè¨å®ãããã®ãªã¹ãã¼ã®ä¸ã§ãã©ãã°ãã¼ã¿ãè¨å®ããã以ä¸ã¯ãã³ã³ãã³ãã®ä¸é¨ããã©ãã°ã§ããããã«ããä¾ã§ãã
<p draggable="true">ãã®ããã¹ãã¯ãã©ãã°ã<strong>ã§ãã¾ã</strong>ã</p>
const draggableElement = document.querySelector('p[draggable="true"]');
draggableElement.addEventListener("dragstart", (event) =>
event.dataTransfer.setData("text/plain", "ãã®ããã¹ãã¯ãã©ãã°ãã§ãã¾ã"),
);
draggable
屿§ã "true"
ã«è¨å®ããã¨ããã®è¦ç´ ã¯ãã©ãã°ã§ããããã«ãªãã¾ãããã®å±æ§ãè¨å®ããã¦ããªããããã㯠"false"
ã«è¨å®ããã¦ããå ´åããã®è¦ç´ ããã©ãã°ããäºã¯ã§ããã代ããã«ããã¹ãã鏿ãããã§ãããã
draggable
屿§ã¯ç»åããªã³ã¯ãå«ãã¦ããããè¦ç´ ã«è¨å®ã§ãã¾ãããã ããç»åã¨ãªã³ã¯ã«ã¤ãã¦ã ãã¯æ¢å®å¤ã true
ã¨ãªã£ã¦ãã¾ãã®ã§ãå®éã«ãããã®è¦ç´ ã§ä½¿ãå ´åã¯ãè¦ç´ ããã©ãã°ã§ããªãããã«ããããã« draggable
屿§ã« false
ãè¨å®ããã¨ããå ´åãã»ã¨ãã©ã§ãããã
ã¡ã¢: è¦ç´ ããã©ãã°å¯è½ã«ãªã£ãå ´åãæååããã®è¦ç´ ã«å«ã¾ãã¦ããä»ã®è¦ç´ ãããã¦ã¹ã«ããã¯ãªãã¯ããã©ãã°ãªã©ã®éå¸¸ã®æä½ã§ã¯é¸æããäºãã§ããªããªããã¨ã«æ³¨æãã¦ãã ãããã¦ã¼ã¶ã¼ãæååã鏿ããã«ã¯ãéå¸¸ã®æä½ã®ä»£ããã«ã Alt ãã¼ãæ¼ããªãããã¦ã¹ã§é¸æãããããã¼ãã¼ãã§æä½ãè¡ãå¿ è¦ãããã¾ãã
ãã©ãã°æä½ã®éå§ãã®ä¾ã§ã¯ã dragstart
ã¤ãã³ãã®ãªã¹ãã¼ã addEventListener()
ã¡ã½ããã§è¿½å ãã¾ãã
<p draggable="true">ãã®ããã¹ãã¯ãã©ãã°ã<strong>ã§ãã¾ã</strong>ã</p>
const draggableElement = document.querySelector('p[draggable="true"]');
draggableElement.addEventListener("dragstart", (event) =>
event.dataTransfer.setData("text/plain", "ãã®ããã¹ãã¯ãã©ãã°ãã§ãã¾ã"),
);
ã¦ã¼ã¶ã¼ããã©ãã°ãéå§ãããã¨ããæã dragstart
ã¤ãã³ããçºè¡ããã¾ãã
ãã®ä¾ã§ã¯ dragstart
ã®ãªã¹ãã¼ã¯ããã©ãã°ãããè¦ç´ èªèº«ã«è¿½å ããã¦ãã¾ãããä»ã®å¤ãã®ã¤ãã³ããããã§ããããã«ãã©ãã°ã¤ãã³ãããããªã³ã°ãã¾ãã®ã§ãããä¸ä½ã®ç¥å
è¦ç´ ã§ã¤ãã³ããç£è¦ãããã¨ãã§ãã¾ãã
dragstart
ã¤ãã³ãã§ã¯ã以ä¸ã§è§£èª¬ãã¦ãããã©ãã°ãã¼ã¿ããã£ã¼ãããã¯ç»åããã©ãã°ã®å¹æãè¨å®ãããã¨ãã§ãã¾ãããã©ãã°ãã¼ã¿ã®æå®ã¯å¿
é ã§ãããå¤ãã®ç¶æ³ã§ã¯ããã£ã¼ãããã¯ç»åã¨ãã©ãã°ã®ç¨®é¡ã¯æ¢å®ã®ãã®ã§åé¡ããã¾ããã
ãã¹ã¦ã®ãã©ãã°ã¤ãã³ãã¯ããã©ãã°ãã¼ã¿ãä¿æããããã® dataTransfer
ã¨å¼ã°ããããããã£ãæã£ã¦ãã¾ã (dataTransfer
㯠DataTransfer
ãªãã¸ã§ã¯ãã®ä¸ã¤ã§ã)ã
ãã©ãã°ãè¡ãããéã«ã¯ãä½ããã©ãã°ããã®ããèå¥ããããã®ãã¼ã¿ããã©ãã°ã«é¢é£ä»ããå¿ è¦ãããã¾ããä¾ãã°ãããã¹ãããã¯ã¹å ã§é¸æãããããã¹ãããã©ãã°ãããå ´åããã©ãã°ãã¼ã¿ã¢ã¤ãã ã«é¢é£ä»ãããããã¼ã¿ã¯ããã¹ããã®ãã®ã§ããåæ§ã«ãã¦ã§ããã¼ã¸ä¸ã®ãªã³ã¯ããã©ãã°ãããå ´åããã©ãã°ãã¼ã¿ã«ã¯ãªã³ã¯ã® URL ãå«ã¾ãã¾ãã
ãã©ãã°ãã¼ã¿
ã«ã¯ããã¼ã¿ã®å (ã¾ãã¯å½¢å¼) ã¨ãã¼ã¿ã®å¤ã® 2 ã¤ã®æ
å ±ãå«ã¾ãã¦ãã¾ããå½¢å¼ã¯åã®æåå (ããã¹ããã¼ã¿ã®å ´å㯠text/plain
ãªã©) ã§ãå¤ã¯ããã¹ãã®æååã§ãããã©ãã°ã®éå§æã«ãåã¨ãã¼ã¿ãæå®ãã¦ãã¼ã¿ã追å ãã¾ãããã©ãã°ä¸ã dragenter
ããã³ dragover
ã¤ãã³ãã®ã¤ãã³ããªã¹ãã¼ã§ã¯ããã©ãã°ããããã¼ã¿ã®ãã¼ã¿åã使ã£ã¦ãããããã許å¯ããã¦ãããã©ããããã§ãã¯ãã¾ãããã¨ãã°ããªã³ã¯ãåãä»ããããããã¿ã¼ã²ããã§ã¯ã text/uri-list
ã¨ãããã¼ã¿åããã§ãã¯ããã¾ããããããã¤ãã³ããçºçããã¨ããªã¹ãã¼ã¯ãã©ãã°ããããã¼ã¿ãåå¾ããããããä½ç½®ã«æ¿å
¥ãã¾ãã
ãã©ãã°ãã¼ã¿ã® types
ããããã£ã¯ã text/plain
ã image/jpeg
ã®ãã㪠MIME ã¿ã¤ãã®æååã®ãªã¹ããè¿ãã¾ããç¬èªã®åã使ãããã¨ãã§ãã¾ãããã使ç¨ãããåã¯ãæ¨å¥¨ããããã©ãã°åã®è¨äºã«è¨è¼ããã¦ãã¾ãã
ä¸ã¤ã®ãã©ãã°æä½ã§ãè¤æ°ã®ç°ãªãå½¢å¼ã®ãã¼ã¿ãæä¾ã§ãã¾ãããã®ä»çµã¿ã«ãããç¬èªã®å½¢å¼ãããã®å½¢å¼ã®ãã¼ã¿ãåãåããªãè¦ç´ åãã®ãã©ã¼ã«ããã¯ç¨ã®å½¢å¼ãªã©ããã¼ã¿ãããé©åãªå½¢å¼ã§å¼ã渡ããã¨ãã§ãã¾ããé常ãæå¾ã®ãã©ã¼ã«ããã¯å
ã¨ãã¦ä½¿ãããå½¢å¼ã¯ã text/plain
åã¨ãã¦è¡¨ãããæ®éã®ããã¹ããã¼ã¿ã§ãããã®ãã¼ã¿ã¯å
ã®ããã¹ãã®åç´ãªæååã¨ãªãã§ãããã
ãã¼ã¿ã dataTransfer
ã«è¨å®ããã«ã¯ã setData()
ã¡ã½ããã使ãã¾ãããã®ã¡ã½ããã¯ã次ã®ä¾ã®ããã«ãã¼ã¿ã®åã¨ãã¼ã¿ã®å¤ã® 2 ã¤ã®å¼æ°ãåãã¾ãã
event.dataTransfer.setData("text/plain", "ãã©ãã°ãããããã¹ã");
ãã®ä¾ã§ã¯ããã¼ã¿ã®å¤ã¯ããã©ãã°ãããããã¹ããã§ãå½¢å¼ã¯ text/plain
ã§ãã
ãã¼ã¿ã¯è¤æ°ã®å½¢å¼ã§æä¾ã§ãã¾ãããããå®ç¾ããã«ã¯ãç°ãªãå½¢å¼ãæå®ã㦠setData()
ã¡ã½ãããè¤æ°åå¼ã³åºãã¾ããæãå
·ä½çãªå½¢å¼ãããå
·ä½çã§ãªãå½¢å¼ã«åãã¦å¼ã³åºãã¾ãã
const dt = event.dataTransfer;
dt.setData("application/x.bookmark", bookmarkString);
dt.setData("text/uri-list", "https://www.mozilla.org");
dt.setData("text/plain", "https://www.mozilla.org");
ããã¯ã 3 ã¤ã®ç°ãªãåã®ãã¼ã¿ã追å ããä¾ã§ããæåã®åã® application/x.bookmark
ã¯ç¬èªã®åã§ããä»ã®ã¢ããªã±ã¼ã·ã§ã³ã¯ãã®åã«å¯¾å¿ãã¦ããªãã§ãããããåãã¦ã§ããµã¤ããã¢ããªã±ã¼ã·ã§ã³ã®ä¸ã®é åå士ã§ã®ãã©ãã°ã§ã¯ããã®ãããªç¬èªã®å½¢å¼ãå©ç¨ã§ãã¾ãã
ã¾ããä»ã®åã§ããã¼ã¿ãæä¾ãããã¨ã§ããã®ãããªç¬èªå½¢å¼ã«å¯¾å¿ãã¦ããªãä»ã®ã¢ããªã±ã¼ã·ã§ã³åãã«ãã代æ¿ã®å½¢å¼ã§ãã©ãã°ã§ããããã«ãªãã¾ãã application/x.bookmark
åã¯ãã®ã¢ããªã±ã¼ã·ã§ã³ã®ä¸ã§ã¯ãã使ããããè©³ç´°ãªæ
å ±ãæä¾ã§ãã¾ãããä»ã®åã§æ¸¡ããããã¼ã¿ã¯ãåç´ãª 1 ã¤ã® URL ãããã¯æååã¨ãªãã¾ãã
ãªãããã®ä¾ã§ã¯ text/uri-list
㨠text/plain
ãåããã¼ã¿ãå«ãã§ãã¾ãããã®ããã«ãããã¨ãå¤ãã®ã§ãããããããªããã°ãªããªã訳ã§ã¯ããã¾ããã
åãå½¢å¼ã§ 2 åãã¼ã¿ãç»é²ããã¨ãå¤ããã¼ã¿ã¯æ°ãããã¼ã¿ã«ãã£ã¦ç½®ãæãããã¾ããããã¼ã¿ã®å½¢å¼ã®ç»é²ã®é çªèªä½ã¯å¤ããã¼ã¿ãç»é²ããæã®ã¾ã¾ã«ãªãã¾ãã
ç»é²ãããã¼ã¿ã¯ clearData()
ã¡ã½ããã«ãã£ã¦åé¤ã§ãã¾ãããã®ã¡ã½ããã¯ãåé¤ãããã¼ã¿ã®å½¢å¼ã弿°ã¨ãã¦æ±ãã¾ãã
event.dataTransfer.clearData("text/uri-list");
clearData()
ã¡ã½ããã®å¼æ°ã«ãããã¼ã¿å½¢å¼ã®æå®ã¯çç¥å¯è½ã§ãããã¼ã¿ã®å½¢å¼ãæå®ãããªãã£ãæã¯ããã¹ã¦ã®åã®ãã¼ã¿ãåé¤ããã¾ãããã©ãã°éå§æã«ãã¼ã¿ã 1 ã¤ãç»é²ãããªãã£ãå ´åããããã¯å¾ã®å¦çã§å
¨ã¦ã®ãã¼ã¿ãåé¤ãããå ´åããã©ãã°æä½ã¯çºçãã¾ããã
ãã©ãã°ãè¡ãããæããã©ãã°å
(dragstart
ã¤ãã³ããçºè¡ãããè¦ç´ ) ãå
ã«ã㦠OS ã«ãã£ã¦ç»åãçæãã (ä¾ãã° Windows ã§ã¯åéæã®ç»åã«ãªãã¾ã)ããã©ãã°ãã¦ããéãã¦ã¹ãã¤ã³ã¿ã¼ã¨ä¸ç·ã«è¡¨ç¤ºããã¾ãããã®ç»åã¯èªåçã«çæããããããããªããç¨æããå¿
è¦ã¯ããã¾ããããããã setDragImage()
ã«ãã£ã¦ãç¬èªã®ãã©ãã°ä¸ã®ãã£ã¼ãããã¯ç»åãæå®ãããã¨ãã§ãã¾ãã
event.dataTransfer.setDragImage(image, xOffset, yOffset);
3 ã¤ã®å¼æ°ãå¿
è¦ã§ããä¸ã¤ç®ã¯ãç»åã¸ã®åç
§ã§ãããã®åç
§ã¯ãé常㯠<img>
è¦ç´ ã§ããã <canvas>
ããã®ä»ã®è¦ç´ ã§ãããã§ãããããã£ã¼ãããã¯ç»åã¯ãç»åãç»é¢ä¸ã§ã©ã®ããã«è¦ããããèæ
®ãã¦çæããã¾ãããç»åã®å ´åã¯ãå
ã®ãµã¤ãºã§æç»ããã¾ãã setDragImage()
ã¡ã½ããã®ç¬¬ 2ã第 3 弿°ã«ã¯ããã¦ã¹ãã¤ã³ã¿ã¼ã«å¯¾ããç¸å¯¾çãªç»åã®è¡¨ç¤ºä½ç½®ãæå®ãã¾ãã
ææ¸ä¸ã«åå¨ããªããã®ããã£ã¼ãããã¯ç»åã¨ãã¦ä½¿ãããã«ã以ä¸ã®ä¾ã®ããã«ãã¦ãç»åã canvas ãå©ç¨ãããã¨ãã§ãã¾ãã
function dragWithCustomImage(event) {
const canvas = document.createElement("canvas");
canvas.width = canvas.height = 50;
const ctx = canvas.getContext("2d");
ctx.lineWidth = 4;
ctx.moveTo(0, 0);
ctx.lineTo(50, 50);
ctx.moveTo(0, 50);
ctx.lineTo(50, 0);
ctx.stroke();
const dt = event.dataTransfer;
dt.setData("text/plain", "ãã©ãã°ããããã¼ã¿");
dt.setDragImage(canvas, 25, 25);
}
ãã®ä¾ã§ã¯ã canvas ã®å¤§ãã㯠50
Ã50
ãã¯ã»ã«ã§ããªãã»ããå¤ã¯ããããã®ååã®å¤ (25
) ã¨ãªã£ã¦ãããç»åã¯ãã¦ã¹ãã¤ã³ã¿ã¼ã®ä¸å¤®ã«è¡¨ç¤ºããã¾ã (ãã¦ã¹ãã¤ã³ã¿ã¼ãç»åã®ä¸å¤®ã«è¡¨ç¤ºããã¾ã)ã
ãã©ãã°ãè¡ãæã®æä½ã«ã¯ãããã¤ãã®ç¨®é¡ãããã¾ãã copy
(ã³ãã¼) ã¯ãã©ãã°ããã¦ãããã¼ã¿ãç¾å¨ã®å ´æããããããå
ã®å ´æã«ã³ãã¼ããããã¨ã示ãã¾ãã move
(ç§»å) ã¯ãã©ãã°ããã¦ãããã¼ã¿ãããããå
ã«ç§»åããããã¨ã示ãã link
(ãªã³ã¯) ã¯ãã©ãã°å
ã¨ããããå
ã®å ´æã¨ã®éã«ä½ããã®å½¢ã§ã®é¢é£ä»ããç¹ãããä½ããããã¨ã示ãã¾ãã
dragstart
ã¤ãã³ãã®ãªã¹ãã¼ã«ããã¦ã effectAllowed
ããããã£ã«å¤ãè¨å®ãããã¨ã§ã ãã©ãã°å
ã«ã¤ãã¦ä¸è¨ã® 3 ã¤ã®æä½ã®ãã¡ã©ãã許å¯ããã¦ããã®ãã示ããã¨ãã§ãã¾ãã
event.dataTransfer.effectAllowed = "copy";
ãã®ä¾ã§ã¯ãã³ãã¼ (copy) ã®ã¿ã許å¯ããã¦ãã¾ãã
è¤æ°ã®ç¨®é¡ã®æä½ãçµã¿åããããã¨ãã§ãã¾ãã
none
ã©ã®æä½ã許å¯ããã¦ããªãï¼ãããããç¦æ¢ï¼ã
copy
ã³ãã¼ã®ã¿ã許å¯ããã¦ããã
move
ç§»åã®ã¿ã許å¯ããã¦ããã
link
ãªã³ã¯ã®ã¿ã許å¯ããã¦ããã
copyMove
ã³ãã¼ã¾ãã¯ç§»åã®ã¿ã許å¯ããã¦ããã
copyLink
ã³ãã¼ã¾ãã¯ãªã³ã¯ã®ã¿ã許å¯ããã¦ããã
linkMove
ãªã³ã¯ã¾ãã¯ç§»åã®ã¿ã許å¯ããã¦ããã
all
ã³ãã¼ãç§»è¡ããªã³ã¯ã®å ¨ã¦ã®æä½ã許å¯ããã¦ããã
æ¢å®å¤ã¯ all
ã§ãã
ä¸ã«åæããã¦ããå¤ã®ããããã¨å
¨ãçããå¤ã ããå©ç¨å¯è½ã§ãããã¨ã«æ³¨æãã¦ãã ããã effectAllowed
ããããã£ã copyMove
ã«è¨å®ããã¨ãã³ãã¼ãç§»åã®æä½ã許å¯ãã¾ãããã¦ã¼ã¶ã¼ããªã³ã¯æä½ãè¡ããã¨ãé²ããã¨ãã§ãã¾ãã effectAllowed
ããããã£ã夿´ããªãå ´åã 'all
' ãæå®ãããæã¨åæ§ã«ããã¹ã¦ã®æä½ã許å¯ããã¾ããã§ãã®ã§ãç¹å®ã®ç¨®é¡ã®æä½ãé¤å¤ãããå ´åãé¤ãã¦ãããããã£ã®å¤ãæåã§è¨å®ããå¿
è¦ã¯ããã¾ããã
ãã©ãã°æä½ã®éã dragenter
ã¾ã㯠dragover
ã¤ãã³ãã®ãªã¹ãã¼ã¯ãæä½ã許å¯ããã¦ãããã©ããã確ãããããã« effectAllowed
ããããã£ãåç
§ã§ãã¾ãããããã®ã¤ãã³ã
ã«ããã¦ãé¢é£ããããããã£ã§ãã dropEffect
ããããã£ã¸ãå®éã«è¡ãããæä½ã®ç¨®é¡ 1 ã¤ã ããæå®ãããã¹ãã§ãã dropEffect
ããããã£ã®å¤ã¨ãã¦å¦¥å½ãªãã®ã¯ãnone
ãcopy
ãmove
ãã¾ã㯠link
ã®ã¿ã§ãããã®ããããã£ã¸ã¯ãè¤æ°ã®æä½ãçµã¿åãããå¤ã¯æå®ã§ãã¾ããã
dragenter
ããã³ dragover
ã¤ãã³ãã«ããã¦ã dropEffect
ããããã£ã¯ã¦ã¼ã¶ã¼ãè¦æ±ãã¦ããæä½ã«åæåããã¾ããã¦ã¼ã¶ã¼ã¯æä½ã®ç¨®é¡ã修飾ãã¼ãæ¼ããã¨ã«ãã夿´ãããã¨ãã§ãã¾ããå®éã«ä½¿ç¨ããããã¼ã¯ãã©ãããã©ã¼ã ãã¨ã«ç°ãªãã¾ããã大æµã®å ´å㯠Shift ãã¼ã¨ Control ãã¼ããã³ãã¼ã»ç§»åã»ãªã³ã¯ã®åæä½ã®åãæ¿ãã«ä½¿ãããã§ãããããã¦ã¹ãã¤ã³ã¿ã¼ã¯ã©ã®æä½ãæã¾ãã¦ããã®ãã示ãããã«ãä¾ãã° copy
ãªãã«ã¼ã½ã«ã®æ¨ªã«ãï¼ãè¨å·ã表示ããããã¨ãã£ã風ã«å¤åããã§ãããã
dragenter
ã¾ã㯠dragover
ã¤ãã³ãã®éã« dropEffect
ããããã£ã®å¤ã夿´ããã¨ãã¦ã¼ã¶ã¼ã鏿ããæä½ã®ç¨®é¡ã䏿¸ãããç¹å®ã®ããããæä½ãå¼·å¶ãããã¨ãã§ãã¾ãããã®æã«æå®ã§ããæä½ã®ç¨®é¡ã¯ã effectAllowed
ããããã£ã®å¤ã¨ãã¦åæããã¦ããæä½ã«å«ã¾ãã¦ããªãã¦ã¯ãªããªããã¨ã«æ³¨æãã¦ãã ããããã以å¤ã®å¤ãè¨å®ããå ´åã¯ã許å¯ããã¦ããæä½ã®ä¸ãã代ããã®å¤ãè¨å®ããã¾ãã
event.dataTransfer.dropEffect = "copy";
ãã®ä¾ã§ã¯ããã³ãã¼ããè¡ãªããã广ã§ãã
ãã®å ´æã¸ã®ãããããç¦æ¢ããã¦ãããã¨ã示ãããã«ãå¤ã¨ã㦠none
ãè¨å®ãããã¨ãã§ãã¾ãã
drop
ããã³ dragend
ã¤ãã³ãã®ä¸ã§ã¯ã dropEffect
ããããã£ããã§ãã¯ãããã¨ã§æçµçã«é¸æããã¦ãã广ãç¹å®ã§ãã¾ãã鏿ããã广ã "move
" ã§ããã°ã dragend
ã¤ãã³ãã®ä¸ã§ãã©ãã°å
ããå
ã®ãã¼ã¿ãåé¤ããã¹ãã§ãã
dragenter
ããã³ dragover
ã¤ãã³ãã®ãªã¹ãã¼ã¯ããã©ãã°ããã¦ããé
ç®ãã©ã®å ´æã«ããããããããã¨ãã¦ããã®ããæ£ç¢ºã«ç¤ºãåãããããã¨ãå¤ãã§ããã¦ã§ããã¼ã¸ãã¢ããªã±ã¼ã·ã§ã³ã®ã»ã¨ãã©ã®é åã¯ããããããã¼ã¿ãåãåãå ´æã¨ãã¦ã¯ä¸é©åã§ããå¾ã£ã¦ããããã®ã¤ãã³ãã«å¯¾ããæ¢å®ã®åä½ã¯ãããããç¦æ¢ããåãããã¾ãã
ããããã許å¯ãããå ´åã¯ã dragenter
ããã³ dragover
ã¤ãã³ãã®ä¸¡æ¹ããã£ã³ã»ã«ãã¦ãæ¢å®ã®å¦çãé²ãå¿
è¦ãããã¾ãããããè¡ãã«ã¯ãã¤ãã³ãã® preventDefault()
ã¡ã½ãããå¼ã³åºãã¦ãã ããã
const draggableElement = document.querySelector('p[draggable="true"]');
draggableElement.addEventListener("dragenter", (event) => {
event.preventDefault();
});
draggableElement.addEventListener("dragover", (event) => {
event.preventDefault();
});
preventDefault()
ã¡ã½ãããå¼ã³åºãã¨ã dragenter
ããã³ dragover
ã¤ãã³ãã®ã©ã¡ãã«ããã¦ãããã®å ´æãããããå¯è½ãªå ´æã§ããã¨ãããã¨ã示ãã¾ããå¤ãã®å ´åã¯ãä¾ãã°ãªã³ã¯ããã©ãã°ããã¦ããæã ããªã©ãç¹å®ã®ç¶æ³ã§ã®ã¿ preventDefault()
ã¡ã½ãããå¼ã³åºãããã¨æãã§ãããã
ãããå®ç¾ããã«ã¯ãæ¡ä»¶ã確ããã¦ãæ¡ä»¶ãæºãããã¦ããæã ãã¤ãã³ãããã£ã³ã»ã«ãããããªé¢æ°ã使ã£ã¦ä¸ãããæ¡ä»¶ãæºãããã¦ããªãæã¯ã¤ãã³ãããã£ã³ã»ã«ããªãã§ããã°ãã¦ã¼ã¶ã¼ããã¦ã¹ã®ãã¿ã³ãæ¾ãã¦ããã®å ´æã¸ã®ããããã¯è¡ããã¾ããã
ãããããåãä»ãããæçµ¶ããããæ±ºããæãä¸è¬çãªæ¹æ³ã¯ããã¼ã¿è»¢éã®ä»çµã¿ã«å«ã¾ãã¦ãããã©ãã°ãã¼ã¿ã®åãå¤å¥ãããã®ã§ããä¾ãã°ãç»åããªã³ã¯ããããã¯ãã®ä¸¡æ¹ã®ã¿ãåãä»ããã¨ãã£ãäºãã§ãã¾ãããããå®ç¾ããã«ã¯ãã¤ãã³ãã® dataTransfer
(ããããã£) ã® types
ããããã£ã確èªãã¾ãã types ããããã£ã¯ãã©ãã°ãéå§ãããæã«ç»é²ãããã¿ã¤ãæååã®ãªã¹ãã§ãæãé©åãªãã®ããæãé©åã§ãªããã®ã®é ã§ä¸¦ãã§ãã¾ãã
function doDragOver(event) {
const isLink = event.dataTransfer.types.includes("text/uri-list");
if (isLink) {
event.preventDefault();
}
}
ãã®ä¾ã§ã¯ãåã®ãªã¹ãã®ä¸ã« text/uri-list åããããã©ããã確èªããããã« contains
ã¡ã½ããã使ç¨ãã¦ãã¾ããããæ¡ä»¶ãçã§ããã°ãã¤ãã³ãã¯ãã£ã³ã»ã«ããã¦ãããããã許å¯ãããã§ãããããããã©ãã°ãã¼ã¿ããªã³ã¯ãå«ãã§ããªããã°ãã¤ãã³ãã¯ãã£ã³ã»ã«ãããããã®å ´æã§ã®ãããããè¡ããã¾ããã
å®éã«è¡ãããå¦çã®ç¨®é¡ãããé©åã«ç¤ºãããã«ã effectAllowed
ã dropEffect
ããããã£ã®ããããããããã¯ãã®ä¸¡æ¹ã«å¤ãæå®ãããã¨æãäºãããã§ããããå½ç¶ã§ãããã¤ãã³ãããã£ã³ã»ã«ããã®ãå¿ããã¨ããããã®ããããã£ã®å¤ãå¤ãã¦ãä½ãèµ·ããã¾ããã
ãã®å ´æã¸ã®ããããã許å¯ããã¦ãããã¨ãã¦ã¼ã¶ã¼ã«ç¤ºãæ¹æ³ã¯ããã¤ãããã¾ãããã¦ã¹ãã¤ã³ã¿ã¼ã¯ dropEffect
ããããã£ã®å¤ã«å¿ãã¦é©åãªãã®ã«å¤åãã¾ãã
å®éã®æ£ç¢ºãªè¡¨ç¤ºã®ããæ¹ã¯ã¦ã¼ã¶ã¼ã®ãã©ãããã©ã¼ã ã«ä¾åãã¾ãããé常ã¯ä¾ãã°ãã³ãã¼ãã«å¯¾ãã¦ã¯ãï¼ãè¨å·ã表示ãããã¾ããããããã許å¯ããã¦ããªãæã¯ãããã«ã¯ããããã§ãã¾ãããã¨ããæå³ã®ã¢ã¤ã³ã³ã表示ãããã§ããããå¤ãã®å ´åã«ããã¦ããã®ãã¤ã³ã¿ã¼ã«ãããã£ã¼ãããã¯ã¯ååã«å½¹ç«ã¡ã¾ãã
ããåã£ãè¦è¦å¹æã®ããã«ãä¾ãã°ãããããè¡ãããä½ç½®ã«è¦ç´ ãæ¿å
¥ãããªã©ã dragenter
ã¤ãã³ãã®éã«ä»ã®æä½ããããã¨ãã§ãã¾ãããã®ä¾ãªããæ¿å
¥ãããè¦ç´ ã¯ãæ¿å
¥ç®æã示ããã¼ã«ã¼ãããã¯ãã©ãã°ããã¦ããè¦ç´ ãæ°ããä½ç½®ã«æ¿å
¥ãããæã®ç¶æ
ã®ãã¬ãã¥ã¼ãªã©ã¨ãã¦å©ç¨ã§ããã§ãããããã®ãããªå¹æã¯ãä¾ãã° <img>
è¦ç´ ãçæãã¦ã dragenter
ã¤ãã³ãã®å¦çä¸ã«ããã¥ã¡ã³ãä¸ã«åã«æ¿å
¥ããã ãã§å®ç¾ã§ãã¾ãã
dragover
ã¤ãã³ãã¯ããã¦ã¹ãã¤ã³ã¿ã¼ãç¾å¨æãã¦ããè¦ç´ ã«ããã¦çºè¡ããã¾ããæ¿å
¥ç¹ã®ãã¼ã«ã¼ã dragover
ã¤ãã³ãã®çºè¡ã«å¿ãã¦ç§»åããããã¨æãã®ã¯èªç¶ãªæ¬²æ±ã§ãããããã®ãããªå ´åã«ã¯ãä»ã®ãã¦ã¹ã¤ãã³ãã§ãã¦ã¹ãã¤ã³ã¿ã¼ã®ä½ç½®ãåå¾ããããã«ä½¿ãããã®ã¨åãè¦é ã§ãã¤ãã³ãã® clientX
㨠clientY
ããããã£ãå©ç¨ã§ãã¾ãã
æå¾ã«ããã©ãã°ä¸ã«ãã¦ã¹ãã¤ã³ã¿ã¼ãè¦ç´ ã®ä¸ãé¢ããæã dragleave
ã¤ãã³ããçºè¡ããã¾ããããã¯æ¿å
¥ç¹ã®ãã¼ã«ã¼ããã¤ã©ã¤ãè¡¨ç¤ºãæ¶ãã®ã«ã¡ããã©ããã¿ã¤ãã³ã°ã§ãããã®ã¤ãã³ãããã£ã³ã»ã«ããå¿
è¦ã¯ããã¾ããã dragleave
ã¤ãã³ãã¯ããã©ãã°ããã£ã³ã»ã«ãããæã§ã常ã«çºè¡ããã¾ãã®ã§ããã®ã¤ãã³ãã«ãã£ã¦ãæ¿å
¥ç¹ã®æ¶å»ãªã©ã確å®ã«è¡ããã¨ãã§ãã¾ãã
ã¦ã¼ã¶ã¼ããã¦ã¹ã®ãã¿ã³ãé¢ããæããã©ãã° & ããããã®æä½ã¯çµäºãã¾ãã
æå¹ãªãããã対象ã¨ãªã£ã¦ããè¦ç´ ã®ä¸ã§ãã¦ã¹ã®ãã¿ã³ãé¢ãããå ´åãæå¾ã® dragenter
㨠dragover
ã¤ãã³ãã¯ãã£ã³ã»ã«ããã¦ããããããæåãã drop
ã¤ãã³ãããã®ãããã対象ã«ããã¦çºè¡ããã¾ãããã以å¤ã®å ´æã§ãã¿ã³ãæ¾ãããå ´åã¯ããã©ãã°æä½ã¯ãã£ã³ã»ã«ããã drop
ã¤ãã³ãã¯çºè¡ããã¾ããã
drop
ã¤ãã³ãã®éãããªãã¯ããããããããã¼ã¿ãã¤ãã³ãããåå¾ãã¦ãããããä½ç½®ã«æ¿å
¥ãããã¨ã«ãªãã¾ããã©ã®ãã©ãã° & ããããæä½ãæã¾ãã¦ããã®ãã¯ã dropEffect
ããããã£ã§å¤å¥ãããã¨ãã§ãã¾ãã
ãã¹ã¦ã®ãã©ãã° & ããããé¢é£ã®ã¤ãã³ãã«ããã¦ãã¤ãã³ãã® dataTransfer
ããããã£ã¯ãã©ãã°ããã対象ã«é¢ãããã¼ã¿ãä¿æãã¦ãã¾ãããã¼ã¿ã®åå¾ã«ã¯ getData()
ã¡ã½ãããå©ç¨ãããã¨ã«ãªãã§ãããã
function onDrop(event) {
const data = event.dataTransfer.getData("text/plain");
event.target.textContent = data;
event.preventDefault();
}
getData()
ã¡ã½ããã¯ãåå¾ããããã¼ã¿ã®åã弿°ã¨ãã¦åãã¾ããå®è¡ããã¨ããã©ãã°æä½ã®éå§æã« setData()
ã¡ã½ããã«ãã£ã¦ç»é²ãããå¤ãæååã¨ãã¦è¿ããã¾ãããã®åã«å¯¾ãããã¼ã¿ãåå¨ããªãå ´åã¯ã空æåãè¿ããã¾ããå½ç¶ãªãããç´åã® dragover
ã¤ãã³ãã§ã®å¦çã«ããã¦ãã§ãã¯ããæã¨åæ§ã«ãããªãã¯ãã¼ã¿ã®æ£ããå½¢å¼ãå©ç¨å¯è½ãã©ãããç¥ãããã¨æãã§ãããã
ä¸è¨ã®ä¾ã§ã¯ãã¾ããã¼ã¿ãåå¾ãããããã対象ã®å
容ããã¹ãã¨ãã¦ãããæ¿å
¥ãã¦ãã¾ãããã㯠p
è¦ç´ ã div
è¦ç´ ããããã対象ã®é åã¨ãã¦ä½¿ãããäºãæ³å®ãã¦ããããã©ãã°ãããããã¹ããããããä½ç½®ã«æ¿å
¥ããã¨ãã广ãããããã¾ãã
ã¦ã§ããã¼ã¸ã«ããã¦ã¯ããããããåãä»ããå ´åãã¤ãã³ãã® preventDefault()
ã¡ã½ãããå¼ã³åºãã¹ãã§ããããã«ãã£ã¦ããã©ã¦ã¶ã¼å
ã§ã®ããããæã®æ¢å®ã®æåããã£ã³ã»ã«ããã¾ããä¾ãã°ããªã³ã¯ãã¦ã§ããã¼ã¸ã«ãããããããå ´åã Firefox ã¯ãã®ãªã³ã¯å
ãèªã¿è¾¼ããã¨ãã¾ããã¤ãã³ãããã£ã³ã»ã«ãããã¨ã§ããã®åä½ã¯ææ¢ããã¾ãã
ä»ã®å½¢å¼ã§ãã¼ã¿ãåå¾ãããã¨ãã§ãã¾ãããã¼ã¿ããªã³ã¯ã§ãã£ãå ´åããã®ãã¼ã¿ã¯ text/uri-list
åã§ãæä¾ããã¦ããã§ãããããã®å ´åããªã³ã¯ãå
å®¹ã«æ¿å
¥ãããã¨ãã§ãã¾ãã
function doDrop(event) {
const lines = event.dataTransfer.getData("text/uri-list").split("\n");
lines
.filter((line) => !line.startsWith("#"))
.forEach((line) => {
const link = document.createElement("a");
link.href = line;
link.textContent = line;
event.target.appendChild(link);
});
event.preventDefault();
}
ãã®ä¾ã¯ããã©ãã°ããããã¼ã¿ãããªã³ã¯ãæ¿å
¥ãã¾ããååããæ³åã§ããéãã text/uri-list
åã¯å®éã«è¤æ°ã® URL ã®æ¹è¡åºåãã®ãªã¹ããå«ãã§ããå ´åãããã¾ãããã®ã³ã¼ãã§ã¯ã split
ã使ã£ã¦æååãè¡ãã¨ã«åå²ããåè¡ã«ç¹°ãè¿ãå¦çãè¡ã£ã¦ãããããããªã³ã¯ã¨ãã¦ææ¸ä¸ã«æ¿å
¥ãã¦ãã¾ãããã³ãã¼è¨å· (#
) ã§å§ã¾ããã®ã¯ã³ã¡ã³ãã¨ãã¦é¤å¤ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
åç´ãªä½¿ãæ¹ã¨ãã¦ããªã¹ãã®ä¸ã®æåã®æå¹ãª URL ãåå¾ããããã«ãç¹å¥ãªå URL
ãå©ç¨ã§ãã¾ãã
const link = event.dataTransfer.getData("URL");
ããã«ãã£ã¦ãã³ã¡ã³ãã®é¤å¤ãªã©ã®å¦çã¯ä¸åä¸è¦ã«ãªãã¾ããããããããã¯ãªã¹ãã®ä¸ã®æåã® URL ã ãããåå¾ã§ããªãã¨ããå¶éãããã¾ãã
URL
åã¯ç¹å¥ãªçç¥è¡¨è¨ç¨ã®åã§ã types
ããããã£ã§åå¾ã§ããåã®ãªã¹ãã«ã¯åæããã¾ããã
æã«ã¯ãè¤æ°ã®å½¢å¼ããµãã¼ããã¦ããã®ãã¡æãé©åãªå½¢å¼ã§æä¾ããããã¼ã¿ãåå¾ãããã¨æãäºãããã§ãããã以ä¸ã®ä¾ã§ã¯ã3 ã¤ã®å½¢å¼ããããã対象ã«ãã£ã¦ãµãã¼ãããã¦ãã¾ãã
以ä¸ã®ä¾ã¯ãæä¾ããããã¼ã¿ã®ä¸ã§æãé©åãªãã¼ã¿ãè¿ãä¾ã§ãã
function doDrop(event) {
const supportedTypes = [
"application/x-moz-file",
"text/uri-list",
"text/plain",
];
const types = event.dataTransfer.types.filter((type) =>
supportedTypes.includes(type),
);
if (types.length) {
const data = event.dataTransfer.getData(types[0]);
// Use this type of dataâ¦
}
event.preventDefault();
}
ãã©ãã°ã®çµäº
ãã©ãã°æä½ãçµäºããã¨ã dragend
ã¤ãã³ãããã©ãã°å
(dragstart
ã¤ãã³ããçºè¡ãããã®ã¨åãè¦ç´ ) ã«ããã¦çºè¡ããã¾ãããã®ã¤ãã³ãã¯ããã©ãã°æä½ãæåããããã£ã³ã»ã«ããããã«é¢ãããçºè¡ããã¾ããã©ã®æä½ãè¡ãããã®ãã¯ã dropEffect
ããããã£ãåç
§ãã¦ç¥ããã¨ãã§ãã¾ãã
dragend
ã¤ãã³ãã«ãã㦠dropEffect
ããããã£ã®å¤ãnone
ã§ããå ´åããã©ãã°æä½ããã£ã³ã»ã«ããããã¨ãæå³ãã¾ãããã以å¤ã®å ´åã¯ãããããã£ã®å¤ã¯å®éã«è¡ãããæä½ã®ç¨®é¡ã示ãã¾ãããã©ãã°å
ã¯ãã®æ
å ±ã«åºã¥ãã¦ããã©ãã°ãããé
ç®ããç§»åãã®æä½ã®å¾ã«å
ã®å ´æããåé¤ãããã¨ãã§ãã¾ãã mozUserCancelled
ããããã£ã®å¤ã¯ãã¦ã¼ã¶ã¼ãï¼Escape ãã¼ãæ¼ããªã©ãã¦ï¼ãã©ãã°æä½ããã£ã³ã»ã«ããå ´å㯠true ã¨ãªãã䏿£ãªããããå
ã ã£ãå ´åãªã©ã®ä»ã®çç±ã§ãã©ãã°æä½ããã£ã³ã»ã«ãããå ´åããããããã«æåããå ´å㯠false ã¨ãªãã¾ãã
ããããæä½ã¯åãã¦ã£ã³ãã¦ã®ä¸ã¾ãã¯ä»ã®ã¢ããªã±ã¼ã·ã§ã³ã®ä¸ã§è¡ããå¾ã¾ãããããã®å ´åã常㫠dragend
ã¤ãã³ãã¯çºè¡ããã¾ãããã®ã¤ãã³ãã® screenX
ããã³ screenY
ããããã£ã®å¤ã«ã¯ããããããè¡ãããã¨ãã®ç»é¢ä¸ã§ã®åº§æ¨ãè¨å®ããã¾ãã
dragend
ã¤ãã³ãã®ä¼æ¬ãçµäºããå¾ããã©ãã° & ããããã®æä½ã¯å®äºãã¾ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4