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
- drag拖拽程式碼例項
- dnd.js 拖放庫 Drag and DropJS
- HTML5 拖放(Drag和drop)HTML
- html 5 drag and drop upload fileHTML
- JavaScript drag 事件JavaScript事件
- HTML5中 drag 和 drop apiHTMLAPI
- Blazor 使用拖放(drag and drop)上傳檔案Blazor
- 033Drag and Drop-TheBrain提示3DAI
- java swing的drag and drop源程式 (轉)Java
- Canvas drag 實現拖拽拼圖小遊戲Canvas遊戲
- 精讀《結合 React 使用原生 Drag Drop API》ReactAPI
- HTML5 Drag and Drop 的一些總結HTML
- vue-drag-resize 全解,vue拖拽縮放元件Vue元件
- JavaScript drop 事件JavaScript事件
- 滑鼠拖拽事件事件
- SystemUI 拖拽事件分析SystemUI事件
- 史上第二走心的 iOS11 Drag & Drop 教程iOS
- (原創)[C#] 一步一步自定義拖拽(Drag&Drop)時的滑鼠效果:(一)基本原理及基本實現C#
- 基於HTML5的Drag and Drop生成圖片Base64資訊HTML
- 拖拽一個元素如此簡單,mouse、drag、touch三兄弟的用處
- H5 FileReader+drag+ajax2.0+Formdata實現圖片拖拽上傳H5ORM
- JS滑鼠事件完成元素拖拽(簡單-高階)JS事件
- javascript基礎(滑鼠事件拖拽,setCapture()方法)(三十六)JavaScript事件APT
- 如何自定義 drag 樣式
- drag & resize元素的jQuery實現jQuery
- drop asm disk、撤銷drop asm diskASM
- Drop DatabaseDatabase
- 視覺化拖拽 UI 佈局之拖拽篇視覺化UI
- SQL__DROPSQL
- windows drop emWindows