5分鐘弄清楚html5的drag and drop,及其他監聽事件和執行的順序。
定義和用法在拖放的過程中會觸發以下事件:
在拖曳目標上觸發事件(來源元素):
釋放目標時觸發的事件:
Internet Explorer 9+, Firefox, Opera, Chrome, 和Safari 支援拖曳。
注意:Safari 5.1.2不支援拖曳;拖曳元素時,每隔350 毫秒就會觸發ondragover 事件。
範例如下:
<!DOCTYPE html><html lang=en><head> <meta charset=UTF-8> <meta name=viewport content=width=device-width, initial-scale=1.0> <meta http-equiv=X-UA -Compatible content=ie=edge> <title>5分鐘drag and drop簡潔範例</title> <style> #draggable { width: 200px; height: 20px; text-align: center; background: white; } .dropzone { width: 200px; height: 20px; background: blueviolet; margin-bottom: 10px; var dragged; document.addEventListener(dragstart, function (event) { console.log('==========dragstart 開始拖曳==========一次拖曳只執行一次'); // 儲存拖曳元素的參考(ref.) dragged = event.target; // 使其半透明event.target.style.opacity = .5; }, false); /*拖曳目標元素時觸發drag事件*/ document.addEventListener(drag, function (event) { // console.log('==========drag==========拖拉時會一直監聽,直到放下元素'); }, false); /* 放置目標元素時觸發事件*/ document.addEventListener(dragover, function (event) { // console.log('==========dragover==========拖曳時會一直監聽,直到放下元素'); // 阻止預設動作以啟用drop event.preventDefault (); }, false); document.addEventListener(dragenter, function (event) { console.log('==========dragenter 拖曳元素進入目標元素============對應dragleave'); //當可拖曳的元素進入可放置的目標時高亮目標節點if (event.target.className == dropzone) { event.target.style.background = purple; } }, false); document.addEventListener(dragleave, function (event) { console.log('==========dragleave 拖曳元素離開目標元素==========對應dragenter'); //當拖曳元素離開可放置目標節點,重設其背景if (event.target.className == dropzone) { event.target.style.background = ; } }, false); document.addEventListener(drop, function (event ) { console.log('==========drop 放下元素==========一次拖曳只執行一次,在dragenter前觸發'); //阻止預設動作(如開啟一些元素的連結) event.preventDefault(); // 將拖曳的元素到所選的放置目標節點中if (event.target.className == dropzone) { event.target.style. background = ; dragged.parentNode.removeChild(dragged); event.target.appendChild(dragged); } }, false); document.addEventListener(dragend, function (event) { console.log('==========dragend 結束拖曳==========一次拖曳只執行一次'); / / 重置透明度event.target.style.opacity = ; }, false); </script></head><body> <div class=dropzone> <div id=draggable draggable=true ondragstart=event.dataTransfer.setData('text/plain',null)> 這是可以拖曳的DIV </div> </div> <div class=dropzone></div> <div class=dropzone></ div> <div class=dropzone></div></body></html>以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。