Ðиже опиÑÐ°Ð½Ñ Ñаги, коÑоÑÑе пÑоиÑÑ Ð¾Ð´ÑÑ Ð¿Ñи drag and drop опеÑаÑии.
ÐÑимеÑание: Drag опеÑаÑии опиÑÑваÑÑÑÑ Ð² докÑменÑе, иÑполÑзÑÑ DataTransfer
инÑеÑÑейÑ. ÐÑÐ¾Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð½Ðµ иÑполÑзÑÐµÑ Ð½ÐµDataTransferItem
инÑеÑÑейÑ, неDataTransferItemList
инÑеÑÑейÑ.
draggable
аÑÑибÑÑÑ
Ðа веб-ÑÑÑаниÑе, в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð¸ÑполÑзÑеÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ drag (пеÑеÑаÑкиваниÑ) по ÑмолÑаниÑ. ÐклÑÑÐ°Ñ Ð²ÑделеннÑй ÑекÑÑ, изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑÑÑлки. Ðогда изобÑажение или ÑÑÑлка пеÑеноÑÑÑÑÑ, URL изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑÑÑлки ÑÑÑанавливаеÑÑÑ Ð² каÑеÑÑве даннÑÑ drag и пеÑеÑаÑкивание наÑинаеÑÑÑ. ÐÐ»Ñ Ð´ÑÑÐ³Ð¸Ñ ÑлеменÑов, они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑаÑÑÑÑ Ð²ÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ЧÑÐ¾Ð±Ñ ÑвидеÑÑ ÑÑо в дейÑÑвии, вÑделиÑе облаÑÑÑ Ð²ÐµÐ±-ÑÑÑаниÑÑ, а заÑем нажмиÑе и ÑдеÑживайÑе ÐºÐ½Ð¾Ð¿ÐºÑ Ð¼ÑÑи и пеÑеÑаÑиÑе вÑделение. ÐоÑвиÑÑÑ ÑпеÑиÑиÑнÑй Ð´Ð»Ñ ÐС ÑендеÑинг вÑделенного ÑÑагменÑа и бÑÐ´ÐµÑ ÑледоваÑÑ Ð·Ð° ÑказаÑелем мÑÑи пÑи пеÑеÑаÑкивании. Ðднако ÑÑо поведение ÑвлÑеÑÑÑ ÑолÑко drag поведением по ÑмолÑаниÑ, еÑли Ð½ÐµÑ Ð¾Ð±ÑабоÑÑиков, опÑеделÑÑÑÐ¸Ñ Ð´Ð°Ð½Ð½Ñе Ð´Ð»Ñ Ð¿ÐµÑеÑаÑкиваниÑ.
Ð HTML, кÑоме Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñажений, ÑÑÑлок и вÑделеннÑÑ Ð¾Ð±Ð»Ð°ÑÑей, никакие дÑÑгие ÑлеменÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ пеÑеноÑÑÑÑÑ.
ÐÐ»Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð´ÑÑÐ³Ð¸Ñ HTML-ÑлеменÑов, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ ÑÑи пÑнкÑа :
[
draggable](/ru/docs/Web/HTML/Global_attributes#draggable)="true"
на ÑлеменÑ, коÑоÑÑй Ð²Ñ Ñ
оÑиÑе ÑделаÑÑ Ð¿ÐµÑеÑаÑкиваемÑм.dragstart
.ÐÐ¾Ñ Ð¿ÑимеÑ, коÑоÑÑй позволÑÐµÑ Ð¿ÐµÑеÑаÑкиваÑÑ ÑаÑÑÑ ÑодеÑжимого.
<p
draggable="true"
ondragstart="event.dataTransfer.setData('text/plain', 'This text may be dragged')">
This text <strong>may</strong> be dragged.
</p>
ÐÑÑибÑÑ [
draggable](/ru/docs/Web/HTML/Global_attributes#draggable)
ÑÑÑановлен в "true"
, Ñ.о. ÑÑÐ¾Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑÑановиÑÑÑ Ð¿ÐµÑеÑаÑкиваемÑм. ÐÑли ÑÑÐ¾Ñ Ð°ÑÑибÑÑ Ð±Ñл опÑÑен или ÑÑÑановлен в "false"
, Ñо ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑенеÑÑн, и вмеÑÑо ÑÑого бÑÐ´ÐµÑ Ð²ÑбÑан ÑекÑÑ.
ÐÑÑибÑÑ [
draggable](/ru/docs/Web/HTML/Global_attributes#draggable)
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован Ð´Ð»Ñ Ð»Ñбого ÑлеменÑа, вклÑÑÐ°Ñ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑÑÑлки. Ðднако, Ð´Ð»Ñ Ð¿Ð¾ÑледниÑ
двÑÑ
, знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ - true
, Ñ.о. Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑолÑко иÑполÑзоваÑÑ Ð°ÑÑибÑÑ [
draggable](/ru/docs/Web/HTML/Global_attributes#draggable)
Ñо знаÑением false
Ð´Ð»Ñ Ð¾ÑклÑÑение пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ ÑÑиÑ
ÑлеменÑов.
ÐÑимеÑание: Ðогда ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑÑановиÑÑÑ Ð¿ÐµÑеÑаÑкиваемÑми, ÑекÑÑ Ð¸Ð»Ð¸ дÑÑгие ÑлеменÑÑ Ð² нем болÑÑе не могÑÑ Ð±ÑÑÑ Ð²ÑбÑÐ°Ð½Ñ Ð¾Ð±ÑÑнÑм ÑпоÑобом, ÑÑÐ»ÐºÐ°Ñ Ð¸ пеÑеÑаÑÐºÐ¸Ð²Ð°Ñ Ð¼ÑÑÑÑ. ÐмеÑÑо ÑÑого полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑдеÑживаÑÑ ÐºÐ»Ð°Ð²Ð¸ÑÑ Alt ÑÑÐ¾Ð±Ñ Ð²ÑбÑаÑÑ ÑекÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÑÑи или клавиаÑÑÑÑ.
ÐаÑало опеÑаÑии пеÑеÑаÑкиваниÑРпÑимеÑе, обÑабоÑÑик добавлен Ð´Ð»Ñ ÑобÑÑÐ¸Ñ dragstart
Ñ Ð¸ÑполÑзованием аÑÑибÑÑа
.ondragstart
<p
draggable="true"
ondragstart="event.dataTransfer.setData('text/plain', 'This text may be dragged')">
This text <strong>may</strong> be dragged.
</p>
Ðогда полÑзоваÑÐµÐ»Ñ Ð½Ð°ÑÐ¸Ð½Ð°ÐµÑ Ð¿ÐµÑеÑаÑкивание, запÑÑкаеÑÑÑ ÑобÑÑие dragstart
.
Ð ÑÑом пÑимеÑе обÑабоÑÑик dragstart
добавлен к ÑÐ°Ð¼Ð¾Ð¼Ñ Ð¿ÐµÑемеÑаемом ÑлеменÑÑ. Ðднако, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑлÑÑаÑÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокого пÑедка, Ñак как ÑобÑÑие пеÑеÑаÑкивание вÑплÑÐ²Ð°ÐµÑ Ð²Ð²ÐµÑÑ
как и болÑÑинÑÑво ÑобÑÑий.
ÐнÑÑÑи ÑобÑÑÐ¸Ñ dragstart
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ drag даннÑе, изобÑажение оÑклика, drag-ÑÑÑекÑÑ, вÑе ÑÑо опиÑано ниже. Ðднако, обÑзаÑелÑÐ½Ñ ÑолÑко drag даннÑе. (ÐзобÑажение и drag-ÑÑÑекÑÑ Ð¿Ð¾ ÑмолÑаниÑ, подÑ
одÑÑ Ð² болÑÑинÑÑве ÑиÑÑаÑий)
ÐÑе drag events
имеÑÑ ÑвойÑÑво, назÑваемоеdataTransfer
, коÑоÑое ÑодеÑÐ¶Ð¸Ñ drag-даннÑе (dataTransfer
ÑÑо DataTransfer
object).
Ðогда пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеÑаÑкивание, даннÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑвÑÐ·Ð°Ð½Ñ Ñ Ð¿ÐµÑеÑаÑкиванием, коÑоÑое опÑеделÑеÑ, ÑÑо пеÑеÑаÑкиваеÑÑÑ. ÐапÑимеÑ, пÑи пеÑеÑаÑкивании вÑделенного ÑекÑÑа в ÑекÑÑовое поле даннÑе, ÑвÑзаннÑе Ñ ÑлеменÑом даннÑÑ Ð¿ÐµÑеÑаÑкиваниÑ, ÑвлÑÑÑÑÑ Ñамим ÑекÑÑом. ÐналогиÑно, пÑи пеÑеÑаÑкивании ÑÑÑлки на веб-ÑÑÑаниÑе ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ ÑвлÑеÑÑÑ URL-адÑеÑом ÑÑÑлки.
drag data
ÑодеÑÐ¶Ð¸Ñ Ð´Ð²Ð° паÑамеÑÑа, Ñип (или ÑоÑмаÑ) даннÑÑ
, и знаÑение даннÑÑ
. ФоÑÐ¼Ð°Ñ ÑÑо ÑÑÑоковÑй Ñип (Ñакой как text/plain
ÑекÑÑовÑÑ
даннÑÑ
), знаÑение - ÑÑÑока ÑекÑÑа. Ðогда наÑинаеÑÑÑ Ð¿ÐµÑеÑаÑкивание, Ð²Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑе даннÑе, пÑедоÑÑавлÑÑ Ñип и даннÑе. Ðо вÑÐµÐ¼Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð² обÑабоÑÑике ÑобÑÑий [
dragenter](/ru/docs/Web/API/HTMLElement/dragenter_event)
и [
dragover](/ru/docs/Web/API/HTMLElement/dragover_event)
, Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
пеÑеÑаÑкиваемÑÑ
даннÑÑ
, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ, ÑазÑеÑено ли Ñдаление. ÐапÑимеÑ, ÑÐµÐ»Ñ drop, коÑоÑÐ°Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑлки, бÑÐ´ÐµÑ Ð¿ÑовеÑÑÑÑ Ñип text/uri-list
. Ð ÑеÑение ÑобÑÑÐ¸Ñ drop, обÑабоÑÑик бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð´Ð°Ð½Ð½Ñе ÑаÑÐ°Ñ Ð¸ вÑÑавиÑÑ ÐµÐ³Ð¾ на меÑÑо.
СвойÑÑво drag data's
types
возвÑаÑÐ°ÐµÑ ÑпиÑок MIME-Ñипов DOMString
, ÑакиÑ
как text/plain
или image/jpeg
. ÐÑ Ñакже можеÑе ÑоздаваÑÑ Ñвои ÑобÑÑвеннÑе ÑипÑ. ÐолÑÑинÑÑво оÑновнÑе иÑполÑзÑемÑÑ
Ñипов опиÑÐ°Ð½Ñ Ð² Recommended Drag Types.
ÐеÑеÑаÑкивание Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ ÑлеменÑÑ Ð´Ð°Ð½Ð½ÑÑ
неÑколÑкиÑ
ÑазлиÑнÑÑ
Ñипов. ÐÑо позволÑÐµÑ Ð¿ÑедоÑÑавлÑÑÑ Ð´Ð°Ð½Ð½Ñе в более ÑпеÑиÑиÑеÑкиÑ
ÑипаÑ
, ÑаÑÑо полÑзоваÑелÑÑкиÑ
, но по пÑедоÑÑавлÑÐµÑ ÑезеÑвнÑе даннÑе Ð´Ð»Ñ drop, коÑоÑÑе не поддеÑживаÑÑ Ð±Ð¾Ð»ÐµÐµ ÑпеÑиÑиÑеÑкие ÑипÑ. Ðак пÑавило, наименее ÑпеÑиÑиÑнÑм Ñипом бÑдÑÑ Ð¾Ð±ÑÑнÑе ÑекÑÑовÑе даннÑе, иÑполÑзÑÑÑие Ñип text/plain
. ÐÑи даннÑе бÑдÑÑ Ð¿ÑоÑÑÑм ÑекÑÑовÑм пÑедÑÑавлением.
УÑÑановка ÑлеменÑов drag-даннÑÑ
dataTransfer
, иÑполÑзÑÑ Ð¼ÐµÑод setData()
. ТÑебÑеÑÑÑ Ð´Ð²Ð° аÑгÑменÑа: Ñип даннÑÑ
и знаÑение даннÑÑ
. ÐапÑимеÑ:
event.dataTransfer.setData("text/plain", "Text to drag");
ÐдеÑÑ, знаÑение - "Text to drag", ÑоÑÐ¼Ð°Ñ - 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");
ÐÐ¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð´Ð°Ð½Ð½Ñе ÑÑÑÑ
ÑазлиÑнÑÑ
ÑоÑмаÑов. ÐеÑвÑй Ñип - application/x.bookmark
, полÑзоваÑелÑÑкий Ñип.ÐÑÑгие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ поддеÑживаÑÑ Ð´Ð°Ð½Ð½Ñй Ñип, но Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий Ñип Ð´Ð»Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¾Ð±Ð»Ð°ÑÑÑми в одном пÑиложение или на одной ÑÑÑаниÑе.
ÐÑедоÑÑавлÑÑ Ð´Ð°Ð½Ð½Ñе и в дÑÑгиÑ
ÑипаÑ
, Ð¼Ñ Ñакже можем поддеÑживаÑÑ Ð¿ÐµÑеÑаÑкивание в дÑÑгие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² менее ÑпеÑиÑиÑнÑÑ
ÑоÑмаÑ
. Тип application/x.bookmark
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедоÑÑавлÑÑÑ Ð´Ð°Ð½Ð½Ñе Ñ Ð±Ð¾Ð»ÐµÐµ подÑобной инÑоÑмаÑией Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² пÑиложении, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº дÑÑгие ÑÐ¸Ð¿Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÐºÐ»ÑÑаÑÑ ÑолÑко один URL-адÑÐµÑ Ð¸Ð»Ð¸ ÑекÑÑовÑÑ Ð²ÐµÑÑиÑ.
ÐбÑаÑиÑе внимание, ÑÑо и text/uri-list
и text/plain
ÑодеÑÐ¶Ð°Ñ Ð¾Ð´Ð½Ð¸ и Ñе же даннÑе в ÑÑом пÑимеÑе. ÐÑо ÑаÑÑо бÑÐ²Ð°ÐµÑ Ñак, но ÑÑо не обÑзаÑелÑно.
ÐÑли Ð²Ñ Ð¿Ð¾Ð¿ÑÑаеÑеÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð´Ð°Ð½Ð½Ñе Ð´Ð²Ð°Ð¶Ð´Ñ Ñ Ñем же ÑоÑмаÑом, новÑе даннÑе заменÑÑ ÑÑаÑÑе даннÑе, но в Ñой же позиÑии в ÑпиÑке Ñипов, ÑÑо и ÑÑаÑÑе даннÑе.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе оÑиÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе, иÑполÑзÑÑ Ð¼ÐµÑод clearData()
, коÑоÑÑй пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð´Ð¸Ð½ аÑгÑменÑ: Ñип даннÑÑ
Ð´Ð»Ñ ÑдалениÑ.
event.dataTransfer.clearData("text/uri-list");
ÐÑгÑÐ¼ÐµÐ½Ñ type
в меÑоде clearData()
опÑионален. ÐÑли type
не Ñказан, даннÑе, ÑвÑзаннÑе Ñо вÑеми Ñипами, ÑдалÑÑÑÑÑ. ÐÑли пеÑеÑаÑкивание не ÑодеÑÐ¶Ð¸Ñ ÑлеменÑов даннÑÑ
пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ вÑе ÑлеменÑÑ Ð±Ñли впоÑледÑÑвии оÑиÑенÑ, Ñо пеÑеÑаÑкивание не пÑоизойдÑÑ.
Ðогда пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿ÐµÑеÑаÑкивание, полÑпÑозÑаÑное изобÑажение генеÑиÑÑеÑÑÑ Ð¸Ð· Ñели пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ ÑобÑÑие dragstart
), и ÑледÑÐµÑ Ð·Ð° ÑказаÑелем полÑзоваÑÐµÐ»Ñ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¿ÐµÑеÑаÑкиваниÑ. ÐÑо изобÑажение ÑоздаÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, поÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ не нÑжно ÑоздаваÑÑ ÐµÐ³Ð¾ ÑамоÑÑоÑÑелÑно. Ðднако Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ setDragImage()
Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñклика пеÑеÑаÑкиваниÑ.
event.dataTransfer.setDragImage(image, xOffset, yOffset);
ÐеобÑ
Ð¾Ð´Ð¸Ð¼Ñ ÑÑи аÑгÑменÑа. ÐеÑвÑй - ÑÑо ÑÑÑлка на изобÑажение. ÐÑа ÑÑÑлка обÑÑно оÑноÑиÑÑÑ Ðº ÑлеменÑÑ <img>
, но Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑноÑиÑÑÑÑ Ðº ÑлеменÑÑ <canvas>
или лÑÐ±Ð¾Ð¼Ñ Ð´ÑÑÐ³Ð¾Ð¼Ñ ÑлеменÑÑ. ÐзобÑажение оÑклика бÑÐ´ÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑÑÑ Ð¸Ð· Ñого, как изобÑажение вÑглÑÐ´Ð¸Ñ Ð½Ð° ÑкÑане, Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñажений они бÑдÑÑ Ð½Ð°ÑиÑÐ¾Ð²Ð°Ð½Ñ Ð² иÑ
пеÑвонаÑалÑном ÑазмеÑе. ÐÑоÑой и ÑÑеÑий аÑгÑменÑÑ Ð¼ÐµÑода setDragImage()
- ÑÑо ÑмеÑениÑ, в коÑоÑÑÑ
изобÑажение должно поÑвлÑÑÑÑÑ Ð¾ÑноÑиÑелÑно ÑказаÑÐµÐ»Ñ Ð¼ÑÑи.
Также можно иÑполÑзоваÑÑ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ canvas, коÑоÑÑÑ Ð½ÐµÑ Ð² докÑменÑе. ÐÑÐ¾Ñ Ð¼ÐµÑод полезен пÑи ÑиÑовании полÑзоваÑелÑÑÐºÐ¸Ñ Ð¸Ð·Ð¾Ð±Ñажений пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑлеменÑа 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", "Data to Drag");
dt.setDragImage(canvas, 25, 25);
}
Ð ÑÑом пÑимеÑе Ð¼Ñ Ð´ÐµÐ»Ð°ÐµÐ¼ один canvas пеÑеÑаÑкиваниÑ. ÐоÑколÑÐºÑ ÑÐ°Ð·Ð¼ÐµÑ Ñ Ð¾Ð»ÑÑа ÑоÑÑавлÑÐµÑ 50Ã50 пикÑелей, Ð¼Ñ Ð¸ÑполÑзÑем ÑмеÑение Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ ÑÑого (25), ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¾Ð±Ñажение бÑло ÑенÑÑиÑовано на ÑказаÑеле мÑÑи.
Drag ÑÑÑекÑÑÐÑи пеÑеÑаÑкивании можно вÑполниÑÑ Ð½ÐµÑколÑко опеÑаÑий. ÐпеÑаÑÐ¸Ñ copy
иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ð° Ñо, ÑÑо пеÑеÑаÑкиваемÑе даннÑе бÑдÑÑ ÑкопиÑÐ¾Ð²Ð°Ð½Ñ Ð¸Ð· ÑекÑÑего меÑÑÐ¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² меÑÑо пеÑеÑаÑкиваниÑ. ÐпеÑаÑÐ¸Ñ move
иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ð° Ñо, ÑÑо пеÑеÑаÑкиваемÑе даннÑе бÑдÑÑ Ð¿ÐµÑемеÑенÑ, а опеÑаÑÐ¸Ñ link
иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ð° Ñо, ÑÑо Ð¼ÐµÐ¶Ð´Ñ Ð¸ÑÑ
однÑм и ÑдалÑемÑм меÑÑоположениÑми бÑÐ´ÐµÑ Ñоздана некоÑоÑÐ°Ñ ÑоÑма ÑвÑзи или ÑоединениÑ.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ, ÐºÐ°ÐºÐ°Ñ Ð¸Ð· ÑÑÑÑ
опеÑаÑий ÑазÑеÑена Ð´Ð»Ñ Ð¸ÑÑоÑника пеÑеÑаÑкиваниÑ, ÑÑÑановив ÑвойÑÑво effectAllowed
в обÑабоÑÑике ÑобÑÑий dragstart
.
event.dataTransfer.effectAllowed = "copy";
Ð ÑÑом пÑимеÑе ÑазÑеÑена ÑолÑко копиÑ.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе комбиниÑоваÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑазлиÑнÑми ÑпоÑобами:
none
Ð½Ð¸ÐºÐ°ÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð½Ðµ ÑазÑеÑена
copy
ÑолÑко copy
move
ÑолÑко move
link
ÑолÑко link
copyMove
ÑолÑко copy
или move
copyLink
ÑолÑко copy
или link
linkMove
ÑолÑко link
или move
all
ÑолÑко copy
, move
, или link
ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ all
.
ÐбÑаÑиÑе внимание, ÑÑо ÑÑи знаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑÑÑ Ñак, как Ñказано вÑÑе. ÐапÑимеÑ, ÑÑÑановка ÑвойÑÑва effectAllowed
на copyMove
позволÑÐµÑ Ð²ÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ пеÑемеÑениÑ, но не позволÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð²ÑполнÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÑвÑзÑваниÑ. ÐÑли Ð²Ñ Ð½Ðµ измениÑе ÑвойÑÑво effectAllowed
, Ñо лÑÐ±Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÑазÑеÑена, как и Ñо знаÑением 'all
'. ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ не нÑжно наÑÑÑаиваÑÑ ÑÑо ÑвойÑÑво, еÑли Ð²Ñ Ð½Ðµ Ñ
оÑиÑе иÑклÑÑиÑÑ Ð¾Ð¿ÑеделÑннÑе ÑипÑ.
Ðо вÑÐµÐ¼Ñ Ð¾Ð¿ÐµÑаÑии пеÑеÑаÑкиваниÑ, обÑабоÑÑик Ð´Ð»Ñ ÑобÑÑий dragenter
или dragover
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑовеÑиÑÑ ÑвойÑÑво effectAllowed
, какие опеÑаÑии ÑазÑеÑенÑ. СвÑзанное ÑвойÑÑво, dropEffect
, должно бÑÑÑ ÑÑÑановлено в пÑеделаÑ
одного из ÑÑиÑ
ÑобÑÑий, ÑÑÐ¾Ð±Ñ ÑказаÑÑ, ÐºÐ°ÐºÐ°Ñ ÐµÐ´Ð¸Ð½ÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð²Ñполнена. ÐопÑÑÑимÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ dropEffect
- none
, copy
, move
, или link
. ÐомбиниÑованнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑого ÑвойÑÑва не иÑполÑзÑÑÑÑÑ.
С ÑобÑÑиÑми dragenter
и dragover
, ÑвойÑÑво dropEffect
иниÑиализиÑÑеÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð·Ð°Ð¿ÑоÑом полÑзоваÑелÑ. ÐолÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¶ÐµÐ»Ð°ÐµÐ¼Ñй ÑÑÑекÑ, нажав клавиÑи-модиÑикаÑоÑÑ. ХоÑÑ ÑоÑнÑе иÑполÑзÑемÑе клавиÑи ÑазлиÑаÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑмÑ, обÑÑно клавиÑи Shift и Control иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑеклÑÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð¿Ð¸Ñованием, пеÑемеÑением и ÑвÑзÑванием. УказаÑÐµÐ»Ñ Ð¼ÑÑи измениÑÑÑ, ÑÑÐ¾Ð±Ñ ÑказаÑÑ, ÐºÐ°ÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÑÑебÑеÑÑÑ. ÐапÑимеÑ, Ð´Ð»Ñ copy
кÑÑÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑвиÑÑÑÑ Ñо знаком плÑÑ ÑÑдом Ñ Ð½Ð¸Ð¼.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе изменÑÑÑ ÑвойÑÑво dropEffect
во вÑÐµÐ¼Ñ ÑобÑÑий dragenter
или dragover
, напÑимеÑ, опÑеделÑÐ½Ð½Ð°Ñ drop-ÑÐµÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко опÑеделÑннÑе опеÑаÑии. ÐÑ Ð¼Ð¾Ð¶ÐµÑе измениÑÑ ÑвойÑÑво dropEffect
, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеопÑеделиÑÑ Ð´ÐµÐ¹ÑÑвие полÑзоваÑелÑ, и обеÑпеÑиÑÑ Ð²Ñполнение ÑпеÑиÑиÑной опеÑаÑии пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи ÐµÑ Ð½Ð°ÑÑÑплении. ÐбÑаÑиÑе внимание, ÑÑо ÑÑÐ¾Ñ ÑÑÑÐµÐºÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ñказан в ÑпиÑке ÑвойÑÑв effectAllowed
. РпÑоÑивном ÑлÑÑае ÐµÐ¼Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑиÑвоено дÑÑгое допÑÑÑимое знаÑение.
event.dataTransfer.dropEffect = "copy";
Ð ÑÑом пÑимеÑе вÑполнÑеÑÑÑ ÑÑÑÐµÐºÑ ÐºÐ¾Ð¿Ð¸ÑованиÑ.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð·Ð½Ð°Ñение none
, ÑÑÐ¾Ð±Ñ ÑказаÑÑ, ÑÑо в ÑÑом меÑÑе не допÑÑкаеÑÑÑ Ñдаление, Ñ
оÑÑ Ð² ÑÑом ÑлÑÑае лÑÑÑе не оÑменÑÑÑ ÑобÑÑие.
Ð ÑобÑÑиÑÑ
drop
и dragend
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ ÑвойÑÑва dropEffect
Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñого, какой ÑÑÑÐµÐºÑ Ð±Ñл в конеÑном иÑоге вÑбÑан. ÐÑли вÑбÑан ÑÑÑÐµÐºÑ "move
",Ñо иÑÑ
однÑе даннÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð¸Ð· иÑÑоÑника пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð² ÑобÑÑии dragend
.
ÐбÑабоÑÑик Ð´Ð»Ñ ÑобÑÑий dragenter
и dragover
иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿ÑÑÑимÑÑ
drop-Ñелей, Ñо еÑÑÑ Ð¼ÐµÑÑ, где могÑÑ Ð±ÑÑÑ ÑбÑоÑÐµÐ½Ñ Ð¿ÐµÑеÑаÑкиваемÑе ÑлеменÑÑ. ÐолÑÑинÑÑво облаÑÑей веб-ÑÑÑаниÑÑ Ð¸Ð»Ð¸ пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ ÑвлÑÑÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑми меÑÑами Ð´Ð»Ñ ÑбÑоÑа даннÑÑ
. Таким обÑазом, обÑабоÑка ÑÑиÑ
ÑобÑÑий по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ допÑÑÐºÐ°ÐµÑ ÑбÑоÑа пеÑеÑаÑкиваемÑÑ
даннÑÑ
.
ÐÑли Ð²Ñ Ñ
оÑиÑе ÑазÑеÑиÑÑ ÑбÑÐ¾Ñ Ð¿ÐµÑеноÑимÑÑ
даннÑÑ
, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ð¾Ð±ÑабоÑÐºÑ Ð¿Ð¾ ÑмолÑаниÑ, оÑменив оба ÑобÑÑÐ¸Ñ dragenter
и dragover
. ÐÑо можно ÑделаÑÑ, либо веÑнÑв false
из опÑеделÑннÑÑ
аÑÑибÑÑом обÑабоÑÑика ÑобÑÑий, либо вÑзвав меÑод preventDefault()
ÑобÑÑие. ÐоÑледнее Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÐµÐµ оÑÑÑеÑÑвимо в ÑÑнкÑии, опÑеделÑнной в оÑделÑном ÑкÑипÑе.
<div ondragover="return false">
<div ondragover="event.preventDefault()"></div>
</div>
ÐÑзÑÐ²Ð°Ñ Ð¼ÐµÑод preventDefault()
во вÑÐµÐ¼Ñ Ð¾Ð±Ð¾Ð¸Ñ
ÑобÑÑий dragenter
и dragover
ÑкажиÑе, ÑÑо падение ÑазÑеÑено в ÑÑом меÑÑе. Ðднако обÑÑно Ð²Ñ Ð·Ð°Ñ
оÑиÑе вÑзваÑÑ Ð¼ÐµÑод preventDefault()
ÑобÑÑÐ¸Ñ ÑолÑко в опÑеделÑннÑÑ
ÑиÑÑаÑиÑÑ
(напÑимеÑ, ÑолÑко пÑи пеÑеÑаÑкивании ÑÑÑлки).
ÐÐ»Ñ ÑÑого вÑзовиÑе ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð¿ÑовеÑÑÐµÑ ÑÑловие и оÑменÑÐµÑ ÑобÑÑие ÑолÑко пÑи его вÑполнении. ÐÑли ÑÑловие не вÑполнено, не оÑменÑйÑе ÑобÑÑие, и ÑбÑÐ¾Ñ Ð¿ÐµÑеÑаÑкиваемÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð½Ðµ пÑоизойдÑÑ, еÑли полÑзоваÑÐµÐ»Ñ Ð¾ÑпÑÑÑÐ¸Ñ ÐºÐ½Ð¾Ð¿ÐºÑ Ð¼ÑÑи.
Ðаиболее ÑаÑпÑоÑÑÑанÑннÑм ÑвлÑеÑÑÑ Ð¿ÑинÑÑие или оÑклонение ÑбÑоÑа в завиÑимоÑÑи Ð¾Ñ Ñипа даннÑÑ
пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи пеÑедаÑе даннÑÑ
â напÑимеÑ, ÑазÑеÑение Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñажений, ÑÑÑлок или и Ñого, и дÑÑгого. ÐÐ»Ñ ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ ÑвойÑÑво types
ÑобÑÑÐ¸Ñ dataTransfer
(ÑвойÑÑво). СвойÑÑво types
возвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив из ÑÑÑок, добавленнÑÑ
пÑи наÑале пеÑеÑаÑкиваниÑ, в поÑÑдке Ð¾Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ знаÑимого к наименее знаÑимомÑ.
function doDragOver(event) {
const isLink = event.dataTransfer.types.includes("text/uri-list");
if (isLink) {
event.preventDefault();
}
}
Ð ÑÑом пÑимеÑе Ð¼Ñ Ð¸ÑполÑзÑем меÑод includes
ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ, пÑиÑÑÑÑÑвÑÐµÑ Ð»Ð¸ Ñип text/uri-list
в ÑпиÑке Ñипов. ÐÑли ÑÑо Ñак, Ð¼Ñ Ð¾Ñменим ÑобÑÑие, Ñак ÑÑо ÑбÑÐ¾Ñ ÑÑановиÑÑÑ ÑазÑеÑÑн. ÐÑли пеÑеÑаÑкиваемÑе даннÑе не ÑодеÑÐ¶Ð°Ñ ÑÑÑлки, ÑобÑÑие не бÑÐ´ÐµÑ Ð¾Ñменено, и ÑбÑÐ¾Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи в ÑÑом меÑÑе.
ÐÑ Ñакже можеÑе ÑÑÑановиÑÑ Ð»Ð¸Ð±Ð¾ ÑвойÑÑво effectAllowed
, либо ÑвойÑÑвоdropEffect
, либо оба одновÑеменно, еÑли Ð²Ñ Ñ
оÑиÑе ÑказаÑÑ Ð±Ð¾Ð»ÐµÐµ конкÑеÑнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ Ñипе опеÑаÑии, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²Ñполнена. ÐÑÑеÑÑвенно, изменение лÑбого ÑвойÑÑва не бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð³Ð¾ ÑÑÑекÑа, еÑли Ð²Ñ Ð½Ðµ оÑмениÑе ÑобÑÑие.
There are several ways in which you can indicate to the user that a drop is allowed at a certain location. The mouse pointer will update as necessary depending on the value of the dropEffect
property.
Although the exact appearance depends on the user's platform, typically a plus sign icon will appear for a 'copy
' for example, and a 'cannot drop here' icon will appear when a drop is not allowed. This mouse pointer feedback is sufficient in many cases.
However, you can also update the user interface with an insertion point or highlight as needed. For simple highlighting, you can use the :-moz-drag-over
CSS pseudoclass on a drop target.
.droparea:-moz-drag-over {
outline: 1px solid black;
}
In this example, the element with the class droparea
will receive a 1 pixel black outline while it is a valid drop target, that is, if the preventDefault()
method was called during the dragenter
event.
ÐÑимеÑание: You must cancel the dragenter
event for this pseudoclass to apply, as this state is not checked for the dragover
event.
For more complex visual effects, you can also perform other operations during the dragenter
event. For example, by inserting an element at the location where the drop will occur. This might be an insertion marker, or an element that represents the dragged element in its new location. To do this, you could create an image or separator element and simply insert it into the document during the dragenter
event.
The dragover
event will fire at the element the mouse is pointing at. Naturally, you may need to move the insertion marker around a dragover
event as well. You can use the event's clientX
and clientY
properties as with other mouse events to determine the location of the mouse pointer.
Finally, the dragleave
event will fire at an element when the drag leaves the element. This is the time when you should remove any insertion markers or highlighting. You do not need to cancel this event. Any highlighting or other visual effects specified using the :-moz-drag-over
pseudoclass will be removed automatically. The dragleave
event will always fire, even if the drag is cancelled, so you can always ensure that any insertion point cleanup can be done during this event.
When the user releases the mouse, the drag and drop operation ends.
If the mouse is released over an element that is a valid drop target, that is, one that cancelled the last dragenter
or dragover
event, then the drop will be successful, and a drop
event will fire at the target. Otherwise, the drag operation is cancelled, and no drop
event is fired.
During the drop
event, you should retrieve that data that was dropped from the event and insert it at the drop location. You can use the dropEffect
property to determine which drag operation was desired.
As with all drag-related events, the event's
property will hold the data that is being dragged. The dataTransfer
getData()
method may be used to retrieve the data again.
function onDrop(event) {
const data = event.dataTransfer.getData("text/plain");
event.target.textContent = data;
event.preventDefault();
}
The getData()
method takes one argument, the type of data to retrieve. It will return the string value that was set when setData()
was called at the beginning of the drag operation. An empty string will be returned if data of that type does not exist. (Naturally, though, you would likely know that the right type of data was available, as it was previously checked during a dragover
event.)
In the example here, once the data has been retrieved, we insert the string as the textual content of the target. This has the effect of inserting the dragged text where it was dropped, assuming that the drop target is an area of text such as a p
or div
element.
In a web page, you should call the preventDefault()
method of the event if you have accepted the drop, so that the browser's default handling is not triggered by the dropped data as well. For example, when a link is dragged to a web page, Firefox will open the link. By cancelling the event, this behavior will be prevented.
You can retrieve other types of data as well. If the data is a link, it should have the type text/uri-list
. You could then insert a link into the content.
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();
}
This example inserts a link from the dragged data. As the name implies, the text/uri-list
type actually may contain a list of URLs, each on a separate line. The above code uses split
to break the string into lines, then iterates over the list of lines, and inserts each as a link into the document. (Note also that links starting with a number sign (#
) are skipped, as these are comments.)
For simple cases, you can use the special type URL
just to retrieve the first valid URL in the list. For example:
const link = event.dataTransfer.getData("URL");
This eliminates the need to check for comments or iterate through lines yourself. However, it is limited to only the first URL in the list.
The URL
type is a special type. It is used only as a shorthand, and it does not appear within the list of types specified in the types
property.
Sometimes you may support some different formats, and you want to retrieve the data that is most specific that is supported. In the following example, three formats are supported by a drop target.
The following example returns the data associated with the best-supported format:
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]);
}
event.preventDefault();
}
ÐконÑание пеÑеÑаÑкиваниÑ
Ðак ÑолÑко пеÑеÑаÑкивание завеÑÑено, ÑобÑÑие dragend
запÑÑкаеÑÑÑ Ð² иÑÑоÑнике пеÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (ÑÐ¾Ñ Ð¶Ðµ ÑлеменÑ, коÑоÑÑй полÑÑил ÑобÑÑие dragstart
). ÐÑо ÑобÑÑие ÑÑабоÑаеÑ, еÑли пеÑеÑаÑкивание бÑло ÑÑпеÑнÑм[1] или еÑли оно бÑло оÑменено. Ðднако Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑвойÑÑво dropEffect
Ð´Ð»Ñ Ð¾Ð¿ÑеделениÑ, ÐºÐ°ÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоизоÑла.
ÐÑли ÑвойÑÑво dropEffect
Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение none
во вÑÐµÐ¼Ñ ÑобÑÑÐ¸Ñ dragend
, Ñо пеÑеÑаÑкивание бÑло оÑменено. РпÑоÑивном ÑлÑÑае ÑÑÑÐµÐºÑ ÑказÑваеÑ, ÐºÐ°ÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð±Ñла вÑполнена. ÐÑÑоÑник Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¿Ð¾Ñле опеÑаÑии пеÑемеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑаÑкиваемого ÑлеменÑа из ÑÑаÑого ÑаÑположениÑ. СвойÑÑво mozUserCancelled
бÑÐ´ÐµÑ Ð¿ÑиÑвоено знаÑение true
, еÑли полÑзоваÑÐµÐ»Ñ Ð¾Ñменил пеÑеÑаÑкивание (нажав Escape), и false
еÑли пеÑеÑаÑкивание бÑло оÑменено по дÑÑгим пÑиÑинам, Ñаким как недопÑÑÑÐ¸Ð¼Ð°Ñ ÑÐµÐ»Ñ Ð¿ÐµÑеÑаÑкиваниÑ, или еÑли оно бÑло ÑÑпеÑнÑм.
СбÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи внÑÑÑи Ñого же окна или над дÑÑгим пÑиложением. СобÑÑие dragend
бÑÐ´ÐµÑ ÑÑабаÑÑваÑÑ Ð²Ñегда, незавиÑимо Ð¾Ñ ÑÑого. СвойÑÑво ÑобÑÑÐ¸Ñ screenX
и screenY
бÑдÑÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð² кооÑдинаÑÑ ÑкÑана, где пÑоизоÑÑл ÑбÑоÑ.
Ðогда ÑобÑÑие dragend
завеÑÑило ÑаÑпÑоÑÑÑанение, опеÑаÑÐ¸Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð²ÐµÑÑена.
[1]: Ð Gecko, dragend
не оÑпÑавлÑеÑÑÑ, еÑли иÑÑ
однÑй Ñзел движеÑÑÑ Ð¸Ð»Ð¸ ÑдалÑеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¿ÐµÑеÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (напÑимеÑ, пÑи ÑбÑаÑÑвании или dragover
). Bug 460801
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