ÐнÑеÑÑÐµÐ¹Ñ HTML Drag and Drop позволÑÐµÑ Ð¿ÑиложениÑм иÑполÑзоваÑÑ ÑÑнкÑионал пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð² бÑаÑзеÑÐ°Ñ . ÐолÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑбÑаÑÑ Ð¿ÐµÑеÑаÑкиваемÑе ÑлеменÑÑ Ð¼ÑÑÑÑ, пеÑеÑаÑиÑÑ Ðº ÑлеменÑÑ ÑбÑоÑа и бÑоÑиÑÑ Ð¸Ñ , оÑпÑÑÑив ÐºÐ½Ð¾Ð¿ÐºÑ Ð¼ÑÑи. Ðо вÑÐµÐ¼Ñ Ð¿ÐµÑеноÑа за ÑказаÑелем ÑледÑÐµÑ Ð¿Ð¾Ð»ÑпÑозÑаÑнÑй обÑаз пеÑеÑаÑкиваемого ÑлеменÑа
ÐÑи Ñоздании веб-ÑайÑов, ÑаÑÑиÑений и XUL-пÑиложений можно наÑÑÑаиваÑÑ, какие именно ÑлеменÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑеÑаÑкиваÑÑ, какÑÑ Ð¾Ð±ÑаÑнÑÑ ÑвÑÐ·Ñ Ð¾Ð½Ð¸ пÑи ÑÑом бÑдÑÑ ÑоздаваÑÑ, и какие ÑлеменÑÑ Ð±ÑдÑÑ ÑоздаваÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ ÑбÑоÑа.
ÐаннÑй Ð¾Ð±Ð·Ð¾Ñ HTML Drag and Drop вклÑÑÐ°ÐµÑ Ð¾Ð¿Ð¸Ñание инÑеÑÑейÑа, оÑновнÑе Ñаги по Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки данного ÑÑнкÑионала в пÑиложение, а Ñакже кÑаÑкие даннÑе о поддеÑжке.
СобÑÑÐ¸Ñ Ð¿ÐµÑеÑаÑкиваниÑHTML drag-and-drop иÑполÑзÑÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ñ ÑобÑÑий DOM
и ÑобÑÑÐ¸Ñ Ð¿ÐµÑеÑаÑкиваниÑ
ÑнаÑледованнÑе Ð¾Ñ ÑобÑÑий мÑÑи
. ÐбÑÑно опеÑаÑÐ¸Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð°ÑинаеÑÑÑ, когда полÑзоваÑÐµÐ»Ñ Ð²ÑбиÑÐ°ÐµÑ Ð¿ÐµÑеÑаÑкиваемÑй ÑлеменÑ, пеÑемеÑÐ°ÐµÑ ÐµÐ³Ð¾ в Ð·Ð¾Ð½Ñ ÑлеменÑа ÑбÑоÑа, поÑле Ñего оÑпÑÑкаеÑ.
Ð Ñ
оде опеÑаÑии пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿ÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½ÐµÑколÑко Ñипов ÑобÑÑий, а ÑобÑÑÐ¸Ñ drag
и dragover
могÑÑ Ð²ÑзÑваÑÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво Ñаз.
У каждого ÑобÑÑÐ¸Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ ÐµÑÑÑ ÑвÑзаннÑй глобалÑнÑй обÑабоÑÑик ÑобÑÑиÑ:
ÐÑимеÑание: ÐÑи пеÑемеÑении Ñайла из опеÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð² бÑаÑÐ·ÐµÑ Ð½Ð¸ ÑобÑÑие dragstart
, ни dragend
не вÑзÑваеÑÑÑ.
Ð HTML Drag and Drop инÑеÑÑейÑам оÑноÑÑÑÑÑ DragEvent
, DataTransfer
, DataTransferItem
и DataTransferItemList
.
ÐнÑеÑÑÐµÐ¹Ñ DragEvent
Ð¸Ð¼ÐµÐµÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ Ð¸ одно ÑвойÑÑво dataTransfer
, коÑоÑое ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом DataTransfer
.
ÐбÑекÑÑ DataTransfer
вклÑÑаÑÑ ÑоÑÑоÑние ÑобÑÑиÑ, Ñакое как Ñип вÑполненного пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (вÑоде copy
или move
), даннÑе пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (один или более ÑлеменÑов) и MIME-Ñип каждого ÑлеменÑа пеÑеÑаÑкиваниÑ. ÐбÑекÑÑ DataTransfer
Ñакже имеÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑлеменÑов из даннÑÑ
о пеÑеÑаÑивании.
ÐÐ»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² пÑиложение поддеÑжки HTML Drag and Drop, ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑолÑко инÑеÑÑейÑÑ DragEvent
и DataTransfer
. (Firefox поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе СпеÑиÑиÑнÑе Ð´Ð»Ñ Gecko ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑа DataTransfer
, но они бÑдÑÑ ÑабоÑаÑÑ ÑолÑко в Firefox.)
ÐаждÑй обÑÐµÐºÑ DataTransfer
ÑодеÑÐ¶Ð¸Ñ ÑвойÑÑво items
, ÑвлÑÑÑееÑÑ ÑпиÑком
обÑекÑов DataTransferItem
. ÐбÑÐµÐºÑ DataTransferItem
пÑедÑÑавлÑÐµÑ Ñобой оÑделÑнÑй пеÑеÑаÑкиваемÑй ÑлеменÑ, каждÑй Ñо ÑвойÑÑвом kind
(либо string
либо file
) и ÑвойÑÑво type
Ð´Ð»Ñ MIME-Ñипа даннÑÑ
ÑлеменÑа. ÐбÑÐµÐºÑ DataTransferItem
Ñакже Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
о пеÑемеÑаемÑÑ
ÑлеменÑаÑ
.
ÐбÑÐµÐºÑ DataTransferItemList
ÑодеÑÐ¶Ð¸Ñ ÑпиÑок обÑекÑов DataTransferItem
. Ðн Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑаÑкиваемÑÑ
обÑекÑов в ÑпиÑок, иÑ
ÑдалениÑ, и оÑиÑÑки ÑпиÑка.
ÐлÑÑевое оÑлиÑие инÑеÑÑейÑов DataTransfer
и DataTransferItem
заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо пеÑвÑй иÑполÑзÑÐµÑ ÑинÑ
ÑоннÑй меÑод доÑÑÑпа к даннÑм о пеÑеÑаÑкиваемÑÑ
обÑекÑаÑ
getData()
, а вÑоÑой â аÑинÑ
ÑоннÑй меÑод getAsString()
.
ÐÑимеÑание: DragEvent
и DataTransfer
ÑиÑоко поддеÑживаÑÑÑÑ Ð´ÐµÑкÑопнÑми бÑаÑзеÑами. Ðднако, поддеÑжка инÑеÑÑейÑов DataTransferItem
и DataTransferItemList
доÑÑаÑоÑно огÑаниÑеннаÑ. Ðолее подÑобно можно ÑзнаÑÑ Ð² Ñазделе ÐоддеÑжка .
Mozilla и Firefox поддеÑживаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÑнкÑии, коÑоÑÑÑ
Ð½ÐµÑ Ð² ÑÑандаÑÑной drag-and-drop модели. ÐÑо ÑдобнÑе ÑÑнкÑии, помогаÑÑие пеÑеÑаÑкиваÑÑ Ð½ÐµÑколÑко ÑлеменÑов или неÑÑÑоковÑÑ
даннÑÑ
(напÑимеÑ, Ñайлов). ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии ÑмоÑÑиÑе ÐеÑеÑаÑкивание и СбÑÐ¾Ñ Ð½ÐµÑколÑкиÑ
ÑлеменÑов. ÐополниÑелÑно поÑмоÑÑиÑе DataTransfer
ÑÑÑаниÑÑ ÑпÑавоÑника Ñо вÑеми ÑпеÑиÑиÑнÑми Ð´Ð»Ñ Gecko ÑвойÑÑвами и меÑодами.
Рданном Ñазделе кÑаÑко опиÑÐ°Ð½Ñ Ð¾ÑновнÑе Ñаги Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² пÑиложение ÑÑнкÑионала drag-and-drop.
ÐбознаÑÑÑе, ÑÑо можно пеÑеÑаÑкиваÑÑЧÑÐ¾Ð±Ñ ÑделаÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÐµÑеÑаÑкиваемÑм, к Ð½ÐµÐ¼Ñ Ð½Ñжно добавиÑÑ Ð°ÑÑибÑÑ draggable
и глобалÑнÑй обÑабоÑÑик ÑобÑÑÐ¸Ñ ondragstart
. ÐÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ в коде ниже:
<script>
function dragstart_handler(ev) {
// ÐобавиÑÑ id Ñелевого ÑлеменÑа в обÑÐµÐºÑ Ð¿ÐµÑедаÑи даннÑÑ
ev.dataTransfer.setData("text/plain", ev.target.id);
}
window.addEventListener("DOMContentLoaded", () => {
// ÐайÑи ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾ id
const element = document.getElementById("p1");
// ÐобавиÑÑ Ð¾Ð±ÑабоÑÑик ÑобÑÑÐ¸Ñ `dragstart`
element.addEventListener("dragstart", dragstart_handler);
});
</script>
<p id="p1" draggable="true">ÐаннÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑвлÑеÑÑÑ Ð¿ÐµÑеÑаÑкиваемÑм.</p>
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии ÑмоÑÑиÑе:
draggable
ÐÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð² опеÑаÑÐ¸Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð»Ñбое колиÑеÑÑво ÑлеменÑов даннÑÑ
. ÐаждÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð°Ð½Ð½ÑÑ
â ÑÑо ÑÑÑока
опÑеделÑнного Ñипа
. ÐбÑÑно MIME-Ñип Ñавен text/html
.
У каждого ÑобÑÑÐ¸Ñ Ð¿ÐµÑеÑаÑкиваниÑ
еÑÑÑ ÑвойÑÑво dataTransfer
, коÑоÑое ÑодеÑÐ¶Ð¸Ñ Ð´Ð°Ð½Ð½Ñе о ÑобÑÑии. ÐÑо ÑвойÑÑво (ÑвлÑÑÑееÑÑ Ð¾Ð±ÑекÑом DataTransfer
), Ñакже Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñми пеÑеÑаÑкиваниÑ. ÐеÑод setData()
иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑлеменÑа в даннÑе пеÑеÑаÑкиваниÑ, как показано в ÑледÑÑÑем пÑимеÑе.
function dragstart_handler(ev) {
// Ðобавление ÑазлиÑнÑÑ
Ñипов даннÑÑ
пеÑеÑаÑкиваниÑ
ev.dataTransfer.setData("text/plain", ev.target.innerText);
ev.dataTransfer.setData("text/html", ev.target.outerHTML);
ev.dataTransfer.setData(
"text/uri-list",
ev.target.ownerDocument.location.href,
);
}
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑаÑÐ·ÐµÑ Ð¿ÑедоÑÑавлÑÐµÑ Ð¸Ð·Ð¾Ð±Ñажение, коÑоÑое в пÑоÑеÑÑе пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑобÑажаеÑÑÑ ÑÑдом Ñ ÑказаÑелем. Тем не менее, пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑоÑонее изобÑажение Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÐµÑода setDragImage()
, как показано в ÑледÑÑÑем пÑимеÑе.
function dragstart_handler(ev) {
// СоздайÑе изобÑажение, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ ÐºÐ°Ðº изобÑажение пеÑеÑаÑкиваниÑ
// ÐÑимеÑание: замениÑе "example.gif" на URL-адÑÐµÑ ÑеалÑного изоÑажениÑ,
// инаÑе оно не бÑÐ´ÐµÑ Ñоздано и бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¸Ð·Ð¾Ð±Ñажение по ÑмолÑаниÑ
let img = new Image();
img.src = "example.gif";
ev.dataTransfer.setDragImage(img, 10, 10);
}
УзнаÑÑ Ð±Ð¾Ð»ÑÑе об изобÑажении пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ в:
ÐпÑеделиÑе ÑÑÑÐµÐºÑ Ð¿ÐµÑеÑаÑкиваниÑСвойÑÑво dropEffect
иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑной ÑвÑзÑÑ, коÑоÑÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¾Ð¿ÐµÑаÑии пеÑеÑаÑкиваниÑ. ÐбÑÑно ÑÑо влиÑÐµÑ Ð½Ð° Ñо, какой кÑÑÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑобÑажаÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¿ÐµÑеÑаÑкиваниÑ. ÐапÑимеÑ, когда полÑзоваÑÐµÐ»Ñ Ð½Ð°Ð²Ð¾Ð´Ð¸Ñ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÐµÐ»Ñ ÑбÑоÑа, кÑÑÑÐ¾Ñ Ð±ÑаÑзеÑа Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑажаÑÑ Ñип опеÑаÑии, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ñоизведена.
Ðожно опÑеделиÑÑ ÑÑи ÑÑÑекÑа:
copy
обознаÑаеÑ, ÑÑо пеÑеÑаÑкиваемÑе даннÑе бÑдÑÑ ÑкопиÑÐ¾Ð²Ð°Ð½Ñ Ð¸Ð· пÑедÑдÑÑего меÑÑа в меÑÑо ÑбÑоÑа.move
обознаÑаеÑ, ÑÑо пеÑеÑаÑкиваемÑе даннÑе бÑдÑÑ Ð¿ÐµÑемеÑÐµÐ½Ñ Ð¸Ð· пÑедÑдÑÑего меÑÑа в меÑÑо ÑбÑоÑа.link
обознаÑаеÑ, ÑÑо Ð¼ÐµÐ¶Ð´Ñ Ð¸ÑÑ
однÑм меÑÑоположением и меÑÑом ÑбÑоÑа бÑÐ´ÐµÑ Ñоздана некоÑоÑÐ°Ñ ÑоÑма Ñвази.Ð ÑеÑение опеÑаÑии пеÑеÑаÑкиваниÑ, ÑÑÑекÑÑ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑиÑÑ, ÑÑо в ÑазнÑÑ Ð¼ÐµÑÑÐ°Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ ÑазнÑе ÑÑÑекÑÑ.
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑиÑÑеÑ, как иÑполÑзоваÑÑ ÑÑо ÑвойÑÑво.
function dragstart_handler(ev) {
ev.dataTransfer.dropEffect = "copy";
}
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии ÑмоÑÑиÑе:
ÐпÑеделиÑе Ð·Ð¾Ð½Ñ ÑбÑоÑаÐо ÑмолÑаниÑ, пÑи ÑбÑоÑе на болÑÑинÑÑво ÑлеменÑов, бÑаÑÐ·ÐµÑ Ð½Ðµ пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
дейÑÑвий. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑÑо поведение и ÑделаÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð·Ð¾Ð½Ð¾Ð¹ ÑбÑоÑа или ÑбÑаÑÑваемÑм, он должен имеÑÑ Ð°ÑÑибÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑÑиков ÑобÑÑий ondragover
и ondrop
.
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑиÑÑеÑ, как иÑполÑзоваÑÑ ÑÑи аÑÑибÑÑÑ, а Ñакже вклÑÑÐ°ÐµÑ Ð¾ÑновнÑе обÑабоÑÑики ÑобÑÑий Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аÑÑибÑÑа.
<script>
function dragover_handler(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = "move";
}
function drop_handler(ev) {
ev.preventDefault();
// ÐолÑÑиÑÑ id Ñели и добавиÑÑ Ð¿ÐµÑемеÑÑннÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² его DOM
const data = ev.dataTransfer.getData("text/plain");
ev.target.appendChild(document.getElementById(data));
}
</script>
<p
id="target"
ondrop="drop_handler(event)"
ondragover="dragover_handler(event)">
Drop Zone
</p>
ÐбÑаÑиÑе внимание, ÑÑо каждÑй обÑабоÑÑик вÑзÑÐ²Ð°ÐµÑ preventDefault()
, ÑÑÐ¾Ð±Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¾Ð±ÑабоÑÐºÑ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑобÑÑÐ¸Ñ (напÑимеÑ, ÑобÑÑÐ¸Ñ ÐºÐ°ÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ ÑобÑÑÐ¸Ñ ÑказаÑелÑ).
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии ÑмоÑÑиÑе:
ÐбÑабоÑайÑе ÑÑÑекÑÑ ÑбÑоÑаÐбÑабоÑÑик ÑобÑÑÐ¸Ñ drop
Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾-ÑÐ°Ð·Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑабаÑÑваÑÑ Ð´Ð°Ð½Ð½Ñе пеÑеÑаÑкиваниÑ, в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного пÑиложениÑ.
Ðак пÑавило, Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð¸ поÑледÑÑÑей обÑабоÑки ÑлеменÑов пеÑеÑаÑкиваниÑ, пÑиложение иÑполÑзÑÐµÑ Ð¼ÐµÑод getData()
. ÐÑоме Ñого, ÑеманÑика пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ dropEffect
и ÑоÑÑоÑÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº-модиÑикаÑоÑов.
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑиÑÑÐµÑ Ð¾Ð±ÑабоÑÑик ÑбÑоÑа, полÑÑаÑÑий id
иÑÑ
одного ÑлеменÑа из даннÑÑ
пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸ заÑем иÑполÑзÑÐµÑ id
Ð´Ð»Ñ Ð¿ÐµÑемеÑÐµÐ½Ð¸Ñ Ð¸ÑÑ
одного ÑлеменÑа к ÑлеменÑÑ ÑбÑоÑа.
<script>
function dragstart_handler(ev) {
// ÐобавиÑÑ id Ñелевого ÑлеменÑа в обÑÐµÐºÑ Ð¿ÐµÑедаÑи даннÑÑ
ev.dataTransfer.setData("application/my-app", ev.target.id);
ev.dataTransfer.effectAllowed = "move";
}
function dragover_handler(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = "move";
}
function drop_handler(ev) {
ev.preventDefault();
// ÐолÑÑиÑÑ id Ñелевого ÑлеменÑа и добавиÑÑ Ð¿ÐµÑемеÑаемÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² его DOM
const data = ev.dataTransfer.getData("application/my-app");
ev.target.appendChild(document.getElementById(data));
}
</script>
<p id="p1" draggable="true" ondragstart="dragstart_handler(event)">
This element is draggable.
</p>
<div
id="target"
ondrop="drop_handler(event)"
ondragover="dragover_handler(event)">
Drop Zone
</div>
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии ÑмоÑÑиÑе:
ÐавеÑÑение пеÑеÑаÑкиваниÑРконÑе опеÑаÑии пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ ÑобÑÑие dragend
пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ñ Ð¸ÑÑ
одного ÑлеменÑа, коÑоÑÑй бÑл ÑелÑÑ Ð½Ð°Ñала пеÑеÑаÑкиваниÑ.
ÐÑо ÑобÑÑие пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ñого, бÑло пеÑеÑаÑкивание вÑполнено или пÑеÑвано. ÐбÑабоÑÑик ÑобÑÑÐ¸Ñ dragend
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑовеÑиÑÑ Ð·Ð½Ð°Ñение ÑвойÑÑва dropEffect
ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, ÑÑпеÑно ли вÑполнена опеÑаÑÐ¸Ñ Ð¿ÐµÑеÑаÑкиваниÑ.
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии об обÑабоÑке завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑии пеÑеÑаÑкиваниÑ, ÑмоÑÑиÑе:
ÐоддеÑжкаÐз ÑаблиÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжки бÑаÑзеÑами инÑеÑÑейÑа DataTransferItem видно, ÑÑо поддеÑжка drag-and-drop доÑÑаÑоÑно обÑиÑÐ½Ð°Ñ ÑÑеди деÑкÑопнÑÑ
бÑаÑзеÑов (за иÑклÑÑением инÑеÑÑейÑов DataTransferItem
и DataTransferItemList
, Ñ ÐºÐ¾ÑоÑÑÑ
поддеÑжка ниже). ÐÑи даннÑе Ñакже ÑказÑваÑÑ, ÑÑо ÑÑеди мобилÑнÑÑ
ÑÑÑÑойÑÑв поддеÑжка оÑÐµÐ½Ñ Ð½Ð¸Ð·ÐºÐ°Ñ.
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