前言
HTML5 中提供了直接拖曳的API#,極大的方便我們實現拖放效果,不需要去寫一大堆的js,只需要透過監聽元素的拖放事件就能實現各種拖放功能。
想要拖曳某個元素,必須設定該元素的 draggable 屬性為 true,當該屬性為 false 時,將不允許拖曳。而 img 元素和 a 元素都預設設定了 draggable 屬性為 true,可直接拖放,如果不想拖放這兩個元素,把屬性設為 false 即可。
拖曳事件
拖曳事件由不同的元素產生。一個元素被拖放,他可能會經過很多元素上,最後到達想要放置的元素內。這裡,我暫時把被拖放的元素稱為源對象,被經過的元素稱為過程對象,到達的元素我稱為目標對象。不同的物件產生不同的拖放事件。
來源物件:
dragstart:來源物件開始拖放。
drag:來源物件拖放過程中。
dragend:來源物件拖曳結束。
dragenter:來源物件開始進入過程物件範圍內。
dragover:來源物件在過程物件範圍內移動。
dragleave:來源物件離開過程物件的範圍。
drop:來源物件被拖曳到目標物件內。
過程物件:
目標物件:
<p id="source" draggable="true">a元素</p> <p id="process">b元素</p> <p id="target">c元素</p> <script> var source = document.getElementById('source'), // a元素 process = document.getElementById('process'), // b元素 target = document.getElementById('target'); // c元素 source.addEventListener('dragstart',function(ev){ // dragstart事件由a元素产生 console.log('a元素开始被拖动'); },false) process.addEventListener('dragenter',function(ev){ // dragenter事件由b元素产生 console.log('a元素开始进入b元素'); },false) process.addEventListener('dragleave',function(ev){ // dragleave事件由b元素产生 console.log('a元素离开b元素'); },false) target.addEventListener('drop',function(ev){ // drop事件由c元素产生 console.log('a元素拖放到c元素了'); ev.preventDefault(); },false) document.ondragover = function(e){e.preventDefault();} </script>
dataTransfer 物件
在所有拖放事件中提供了一個資料傳遞物件 dataTransfer,用於在來源物件和目標物件間傳遞資料。接下來認識這個物件的方法和屬性,來了解它是如何傳遞資料的。
setData()
該方法將資料存入 dataTransfer 物件中。接收兩個參數,第一個表示要存入資料種類的字串,現在支援有以下幾種:
text/plain:文字文字。
text/html:HTML文字。
text/xml:XML文字。
text/uri-list:URL列表,每個URL為一行。
第二個參數為要存入的資料。例如:
event.dataTransfer.setData('text/plain','Hello World');
getData()
該方法從 dataTransfer 物件中讀取資料。參數為 setData 中指定的資料種類。例如:
event.dataTransfer.getData('text/plain');
clearData()
此方法清除 dataTransfer 物件中存放的資料。參數可選,為資料種類。若參數為空,則清空所有種類的資料。例如:
event.dataTransfer.clearData();
setDragImage()
此方法透過用img元素來設定拖放圖示。接收三個參數,第一個為圖示元素,第二個為圖示元素離滑鼠指標的X軸位移量,第三個為圖示元素離滑鼠指標的Y軸位移量。例如:
var source = document.getElementById('source'), icon = document.createElement('img'); icon.src = 'img.png'; source.addEventListener('dragstart',function(ev){ ev.dataTransfer.setDragImage(icon,-10,-10) },false)
effectAllowed 和 dropEffect 屬性
這兩個屬性結合起來設定拖放的視覺效果。
值得注意的是:IE 不支援 dataTransfer 物件。對,不管哪個 IE 版本都不支援。
實作拖放排序
上面已經熟悉了拖放 API 的使用,我們來實作個簡單的拖放排序,這也是在專案中比較常見的。先來理一下想法:
在一個清單中,每個元素都可以被拖放,那首先要給每個元素設定 draggable 屬性為 true。
監聽每個元素的 dragstart 事件,對來源物件做樣式處理來區分。
監聽每個元素的 dragenter 事件,當來源物件進入目前元素裡,就把來源物件加入到該元素之前。這樣子後面的元素就會被來源物件擠下去了,實現了排序的效果。
但是會發現,來源物件無法排到最後一個去,只能在倒數第二。這時就要監聽 dragleave 事件,當過程對像是最後一個元素時,來源對象離開了過程對象,這時就把來源對象加到最後去。
主要程式碼如下:
var source = document.querySelectorAll('.list'), dragElement = null; for(var i = 0; i < source.length; i++){ source[i].addEventListener('dragstart',function(ev){ dragElement = this; },false); source[i].addEventListener('dragenter', function(ev){ if(dragElement != this){ this.parentNode.insertBefore(dragElement,this); } }, false) source[i].addEventListener('dragleave', function(ev){ if(dragElement != this){ if(this == this.parentNode.lastElementChild || this == this.parentNode.lastChild){ this.parentNode.appendChild(dragElement); } } }, false) }; document.ondragover = function(e){e.preventDefault();} document.ondrop = function(e){e.preventDefault();}
完整的程式碼位址:drag-demo
相容
主要是在IE中的相容不太好,不過至少在IE10中能相容於上面的拖曳排序。
而且在我簡單的試驗中發現,就是在 IE 中元素不設定 height 的時候,不會觸發 dragleave 事件。
更重要的一點是在 ios 和安卓上,完全不相容。不過還好,有一個插件能讓它在行動端完美相容。
插件位址:ios-html5-drag-drop-shim
只需要在原有的程式碼中引入該插件,即可在行動端上實現拖曳了。
<script> var iosDragDropShim = { enableEnterLeave: true } </script> <script src="vendor/ios-drag-drop.js"></script>
【相關推薦】
1. 免費h5線上影片教學
#2. HTML5 完整版手冊
####3. ###php.cn原始html5影片教學######以上是HTML5 進階教學--拖放 API 實作拖放排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

H5不僅僅是HTML5的簡稱,它代表了一個更廣泛的現代網頁開發技術生態:1.H5包括HTML5、CSS3、JavaScript及相關API和技術;2.它提供更豐富、互動、流暢的用戶體驗,能在多設備上無縫運行;3.使用H5技術棧可以創建響應式網頁和復雜交互功能。

H5與HTML5指的是同一個東西,即HTML5。 HTML5是HTML的第五個版本,帶來了語義化標籤、多媒體支持、畫布與圖形、離線存儲與本地存儲等新功能,提升了網頁的表現力和交互性。

H5referstoHTML5,apivotaltechnologyinwebdevelopment.1)HTML5introducesnewelementsandAPIsforrich,dynamicwebapplications.2)Itsupportsmultimediawithoutplugins,enhancinguserexperienceacrossdevices.3)SemanticelementsimprovecontentstructureandSEO.4)H5'srespo

H5開發需要掌握的工具和框架包括Vue.js、React和Webpack。 1.Vue.js適用於構建用戶界面,支持組件化開發。 2.React通過虛擬DOM優化頁面渲染,適合複雜應用。 3.Webpack用於模塊打包,優化資源加載。

HTML5hassignificantlytransformedwebdevelopmentbyintroducingsemanticelements,enhancingmultimediasupport,andimprovingperformance.1)ItmadewebsitesmoreaccessibleandSEO-friendlywithsemanticelementslike,,and.2)HTML5introducednativeandtags,eliminatingthenee

H5通過語義化元素和ARIA屬性提升網頁的可訪問性和SEO效果。 1.使用、、等元素組織內容結構,提高SEO。 2.ARIA屬性如aria-label增強可訪問性,輔助技術用戶可順利使用網頁。

"h5"和"HTML5"在大多數情況下是相同的,但它們在某些特定場景下可能有不同的含義。 1."HTML5"是W3C定義的標準,包含新標籤和API。 2."h5"通常是HTML5的簡稱,但在移動開發中可能指基於HTML5的框架。理解這些區別有助於在項目中準確使用這些術語。

H5,即HTML5,是HTML的第五個版本,它為開發者提供了更強大的工具集,使得創建複雜的網頁應用變得更加簡單。 H5的核心功能包括:1)元素允許在網頁上繪製圖形和動畫;2)語義化標籤如、等,使網頁結構清晰,利於SEO優化;3)新API如GeolocationAPI,支持基於位置的服務;4)跨瀏覽器兼容性需要通過兼容性測試和Polyfill庫來確保。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。