前言
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)
##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();}
effect
Allowed 和dropEffect 屬性
這兩個屬性結合起來設定拖放的視覺效果。
- 值得注意的是:IE 不支援 dataTransfer 物件。對,不管哪個 IE 版本都不支援。
實作拖放排序
上面已經熟悉了拖放 API 的使用,我們來實作個簡單的拖放排序,這也是在專案中比較常見的。先來理一下想法:- 在一個清單中,每個元素都可以被拖放,那首先要給每個元素設定 draggable 屬性為 true。
- 監聽每個元素的 dragstart 事件,對來源物件做樣式處理來區分。
- 監聽每個元素的 dragenter 事件,當來源物件進入目前元素裡,就把來源物件加入到該元素之前。這樣子後面的元素就會被來源物件擠下去了,實現了排序的效果。
但是會發現,來源物件無法排到最後一個去,只能在倒數第二。這時就要監聽 dragleave 事件,當過程對像是最後一個元素時,來源對象離開了過程對象,這時就把來源對象加到最後去。
主要程式碼如下:
<script>var iosDragDropShim = { enableEnterLeave: true }</script><script src="vendor/ios-drag-drop.js"></script>############完整的程式碼位址: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>
更多文章:lin-xin/blog
以上是拖放 API 實作拖放排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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庫來確保。

如何創建 H5 鏈接?確定鏈接目標:獲取 H5 頁面或應用程序的 URL。創建 HTML 錨點:使用 <a> 標記創建錨點並指定鏈接目標URL。設置鏈接屬性(可選):根據需要設置 target、title 和 onclick 屬性。添加到網頁:將 HTML 錨點代碼添加到希望鏈接出現的網頁中。

解決 H5 兼容問題的方法包括:使用響應式設計,允許網頁根據屏幕尺寸調整佈局。採用跨瀏覽器測試工具,在發布前測試兼容性。使用 Polyfill,為舊瀏覽器提供對新 API 的支持。遵循 Web 標準,使用有效的代碼和最佳實踐。使用 CSS 預處理器,簡化 CSS 代碼並提高可讀性。優化圖像,減小網頁大小並加快加載速度。啟用 HTTPS,確保網站的安全性。

h5頁面可以通過兩種方法生成鏈接:手動創建鏈接或使用短鏈接服務。通過手動創建,只需複制h5頁面的URL即可;通過短鏈接服務,需將URL粘貼到服務中,然後獲取縮短的URL。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Dreamweaver CS6
視覺化網頁開發工具