drag & drop 拖拽事件
本文將對 HTML5 拖拽操作中涉及的事件進行一下概述。
並不會對每一個事件的用法進行詳細分析,具體參閱本版塊的相關文章。
一.事件所屬元素:
完整的拖動涉及兩個元素或者說兩大類元素。
(1).源元素,也就是被拖動元素。
(2).目標元素,源元素將被拖拽到其中。
簡單程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> p{ width:100px; height:50px; background-color:red; } #box { width:300px; height:100px; background-color:#ccc; } </style> <script> window.onload = (ev) => { let odiv=document.getElementById("box"); let op=document.getElementById("p"); op.ondragstart = (ev) => { ev.dataTransfer.setData("Text",ev.target.id); } odiv.ondragover = (ev) => { ev.preventDefault(); } odiv.ondrop = (ev) => { ev.preventDefault(); let data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); } } </script> </head> <body> <p draggable="true" id="p"></p> <div id="box"></div> </body> </html>
上述程式碼可以將紅色矩形拖拽到灰色矩形中。
所以,紅色矩形就是源元素,灰色矩形是目標元素。
當前標準具有總共存在七個事件,所屬元素如下:
1.源元素上觸發的事件:
(1).dragstart:當源元素開始拖動時觸發。
(2).drag:源元素拖動過程中持續觸發。
(3).dragend:當拖動操作的滑鼠鬆開時觸發此事件,無論是否位於目標元素內。
2.目標元素上觸發的事件:
(1).dragenter:當拖動操作的滑鼠指標進入目標元素時觸發。
(2).dragover:當拖動操作的滑鼠指標在目標元素內移動時觸發。
(3).dragleave:當拖動操作的滑鼠指標離開目標元素時觸發。
(4).drop:當拖動操作的滑鼠指標位於目標元素內,並鬆開滑鼠時觸發。
二.事件觸發順序:
拖拽事件的觸發遵循一定的順序,首先給出先後順序:
(1).dragstart
(2).drag
(3).dragenter
(4).dragover
(5).dragleave
(6).drop
(7).dragend
當然這個順序要靈活看待,比如拖動源元素經過目標元素,然後直接拖出。
此時就不會有drop事件的觸發,整個過程也就沒有drop事件的觸發。
如果拖動源元素進入目標元素,併成功放下,此時沒有dragleave事件的觸發。
但是總體而言,事件的觸發是遵循上述順序,程式碼例項演示如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> p{ width:100px; height:50px; background-color:red; } #box { width:300px; height:100px; background-color:#ccc; } </style> <script> window.onload = (ev) => { let odiv=document.getElementById("box"); let op=document.getElementById("p"); // 源元素 op.ondragstart = (ev) => { ev.dataTransfer.setData("Text",ev.target.id); console.log("螞蟻部落一"); } op.ondrag = (ev) => { console.log("螞蟻部落二"); } op.ondragenter = (ev) => { console.log("螞蟻部落三"); } // 目標元素 odiv.ondragover = (ev) => { ev.preventDefault(); console.log("螞蟻部落四"); } odiv.ondragleave = (ev) => { console.log("螞蟻部落六"); } odiv.ondrop = (ev) => { ev.preventDefault(); let data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); console.log("螞蟻部落五"); } odiv.ondragend = (ev) => { ev.preventDefault(); console.log("螞蟻部落七"); } } </script> </head> <body> <p draggable="true" id="p"></p> <div id="box"></div> </body> </html>
大家可以開啟控制檯,然後拖拽元素自行測試觀察。
相關文章
- drag &drop 拖拽事件事件
- Drag & Drop 拖拽詳解
- HTML5 Drag和Drop 拖拽HTML
- HTML5 drag & drop 拖拽與拖放HTML
- html-拖拽釋放(Drag and drop) APIHTMLAPI
- HTML5原生拖拽/拖放 Drag & Drop 詳解HTML
- 利用File,Drop&Drag,XHR2實現圖片拖拽上傳
- HTML5 : Drag & DropHTML
- dnd.js 拖放庫 Drag and DropJS
- JavaScript drag 事件JavaScript事件
- HTML5中 drag 和 drop apiHTMLAPI
- VARCHART XGantt甘特圖如何Drag & Drop
- Blazor 使用拖放(drag and drop)上傳檔案Blazor
- 精讀《結合 React 使用原生 Drag Drop API》ReactAPI
- JavaScript drop 事件JavaScript事件
- HTML5 Drag and Drop 的一些總結HTML
- 滑鼠拖拽事件事件
- vue-drag-resize 全解,vue拖拽縮放元件Vue元件
- (原創)[C#] 一步一步自定義拖拽(Drag&Drop)時的滑鼠效果:(一)基本原理及基本實現C#
- 拖拽一個元素如此簡單,mouse、drag、touch三兄弟的用處
- H5 FileReader+drag+ajax2.0+Formdata實現圖片拖拽上傳H5ORM
- JS滑鼠事件完成元素拖拽(簡單-高階)JS事件
- 如何自定義 drag 樣式
- SQL__DROPSQL
- torch--drop out
- 完美拖拽
- UMG————拖拽
- drop apply INSTANTIATION for one tableAPP
- DROP AND RECREATE ONLINE REDOLOG FILES
- Quality Inspection in drop shipment process
- 從面相過程的拖拽到物件導向的拖拽再到簡易的元件拖拽物件元件
- vxe-table 樹表格拖拽排序,支援拖拽到空節點,直接拖拽成子級排序
- js拖拽技能JS
- JavaScript拖拽效果JavaScript
- 拖拽 驗證
- js拖拽:右下角拖拽改變圖片大小JS
- 詳解javascript拖拽(二)拖拽的應用及示例JavaScript
- PostgreSQL DBA(164) - pgAdmin(Drop column)SQL