目錄
預設拖曳
#元素拖曳
拖曳事件
拖曳元素
#目標元素
若拖放元素到了目標元素中(在目標元素中放開滑鼠),就會觸發drop事件而不會觸發dragleave事件
setData()用於設定數據,getData()用語接收資料
它們會被分別映射為“text/plain”和“text/uri-list”
effectAllowed
首頁 web前端 H5教程 HTML5元素拖曳drag與拖放drop相關API的具體介紹(圖文)

HTML5元素拖曳drag與拖放drop相關API的具體介紹(圖文)

Mar 11, 2017 pm 03:58 PM

其實HTML5就是新增一些有用的API
讓我們更輕鬆的開發
從而把更多精力都放在業務邏輯上來
這些API的使用也非常簡單
不過我的記性不太好
所以還是以部落格的形式記錄下來(手動滑稽)
今天就來寫一下這個拖曳API

預設拖曳

說起拖放,其實最早實現拖曳功能的還是IE(IE4)
H5就是在IE實例的基礎上指定的拖曳規範
在瀏覽器中,是有預設拖曳的
比如說圖片的拖曳

選取文字的拖曳

連結的拖曳

#元素拖曳

瀏覽器預設允許我們拖曳圖像、文字以及連結
讓其它元素被拖曳也是可以實現的
只需要在元素標籤上新增一個屬性

<p draggable="true"></p>
登入後複製

當拖曳這個元素的時候,瀏覽器就會以半透明複本的方式顯示

拖曳事件

拖曳事件應該分為兩類
一類是被拖曳元素觸發的事件
另一類是拖曳目標元素觸發的事件

<p id="source" draggable="true"></p><p id="target"></p>  <!-- 样式略 -->
登入後複製
var source = document.getElementById(&#39;source&#39;);var target = document.getElementById(&#39;target&#39;);
登入後複製

拖曳元素

#拖曳元素的時候,被拖曳元素會觸發以下事件

  • dragstart

  • drag

  • dragend

當滑鼠點中元素並且開始移動時,就會觸發dragstart事件(類比mousedown)
拖曳過程中會持續不斷地觸發drag事件(類比mousemove)
放開滑鼠取消拖曳時就會觸發dragend事件(類比mouseup)

source.ondragstart = function(){
  console.log(&#39;开始拖拽&#39;);
}source.ondrag = function(){
  console.log(&#39;拖拽中&#39;);
}source.ondragend = function(){
  console.log(&#39;拖拽结束&#39;);
}
登入後複製

#目標元素

當拖曳的元素拖曳到一個目標元素上時,目標元素會觸發下列事件

  • dragenter

  • dragover

  • #dragleave






## drop



拖曳元素到目標上,就會觸發dragenter事件(類比mouseover) 當拖曳元素在目標元素中,就會持續觸發dragover事件

離開目標元素,觸發dragleave事件(類比mouseout)

若拖放元素到了目標元素中(在目標元素中放開滑鼠),就會觸發drop事件而不會觸發dragleave事件

target.ondragenter = function(){
  console.log(&#39;拖动进入目标元素&#39;);
}target.ondragover = function(){
  console.log(&#39;目标元素中拖拽&#39;);
}target.ondragleave = function(){
  console.log(&#39;拖动离开目标元素&#39;);
}target.ondrop = function(){
  console.log(&#39;拖放&#39;);
}
登入後複製



這時我們會發現元素拖曳到目標元素中時
並沒有觸發drop事件


我們看到了一個特殊的遊標(圓環+反斜線)

意思就是無效的拖放
所以導致沒有觸發drop事件
也就是說元素預設是不能夠拖放
只要我們在
目標元素的dragover事件中取消預設事件

就可以解決問題

target.ondragover = function(e){
  console.log(&#39;目标元素中拖拽&#39;);
  e.preventDefault(); //增}
登入後複製

資料交換


#只是簡單的拖放毫無意義

我們需要進行資料交換

而這個用語資料交換的物件就是事件物件的屬性

dataTransfer

dataTransfer的兩個核心方法是setData()和getData()

setData()用於設定數據,getData()用語接收資料

event.dataTransfer.setData(&#39;text&#39;,&#39;some text&#39;);
var text = event.dataTransfer.getData(&#39;text&#39;);//保存在dataTransfer中的数据只能在drop事件处理函数中处理
登入後複製

如果我們拖曳了選取文字
那麼瀏覽器預設就會呼叫dataTransfer.setData,設定對應文字資料setData()和getData()就是資料類型的字串IE定義的資料類型除了「text」文字類型還有「URL」 H5對它進行了擴展,可以指定各種MIME類型

但為了向後相容,它同樣支援“text”和“URL”

它們會被分別映射為“text/plain”和“text/uri-list”

如果資料保存為URL,瀏覽器會做特殊處理,把它當成網頁連結
(所以拖曳連結到另外的瀏覽器視窗就會打開網頁)

  • 必要的話,我們可以手動儲存需要傳輸的資料

    var source = document.getElementById(&#39;source&#39;);var target = document.getElementById(&#39;target&#39;);
    source.ondragstart = function(e){
      e.dataTransfer.setData('text','传递文本数据');
    }
    target.ondragover = function(e){
      e.preventDefault();
    }
    target.ondrop = function(e){
      console.log(e.dataTransfer.getData('text'));
    }
    登入後複製
  • 拖曳設定

  • 在dataTransfer中還有兩個重要的屬性
  • dropEffect

    和###effectAllowed# ########dropEffect######dropEffect屬性值為字串,表示被拖曳元素可以執行哪一種放置行為###要使用這個屬性,必須在dragenter事件處理函數中設置############none 不能把元素拖放至此(除文字方塊外全部元素的預設值)############move 移動到目標#### ########copy 複製到目標###
  • link 目標開啟拖曳元素(拖曳元素必須是連結並有URL)

  • effectAllowed

    effectAllowed屬性值也是字符串,表示允許拖曳元素哪一種dropEffect
    要使用這個屬性,必須在dragst事件處理函數中設定

    • uninitialized 沒有設定任何拖曳行為

    • none 不能由任何行為

    • copy 僅允許dropEffect值為copy

    • link 僅允許dropEffect值為link

    • move 僅允許dropEffect值為move

    • #copyLink 允許dropEffect值為copy和link

    ########## #copyMove 允許dropEffect值為copy和move#############linkMove 允許dropEffect值為link和move############all 允許任意dropEffect##### ####

    以上是HTML5元素拖曳drag與拖放drop相關API的具體介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles