先看看效果
完整測試**:
html5 拖拽
#box
接下來對**進行一一講解:
drag的英譯是 拖、拽 ;drop的意思是 放下
drag和drop 是html5中新增的特性,任何元素都能夠拖放
。大部分主流瀏覽器目前也夠支援html5的拖放功能。
1. 我們想要拖動那個元素,首先要把這個元素設定成可拖拽,
將該元素的
draggable 屬性設定為 true。
有三個值true,false,auto. true可以拖,false不可以,auto由使用者瀏覽器是否支援而定。
2. ondragstart 和datatransfer.setdata() 決定了當我們拖動元素的時候會幹些什麼事:
例如例子中當通過滑鼠拖**標的時候就會觸發
ondragstart
事件,這個事件觸發
handledragstart
這個函式。
function handledragstart(e)
當
拖動img
時,瀏覽器會呼叫setdata()方法,將
被拖動的
img的id值以
」text」格式儲存在datatransfer物件中
。(注:
儲存在datatransfer物件中的資料只能在ondrop事件觸發的函式中getdata來讀取
)。關於
datatansfer
物件的屬性和方法的詳細介紹請看本文結尾!
3. 拖動元素之後,要把元素放到**?所以要設定目標元素,例子中是要把拖動的元素放入box這個div中,所以給div新增了ondragover事件,該事件觸發了allowdrop(e)這個函式。
function allowdrop(e)
注: ondragover
事件規定在何處
可以放置被拖動的元素。(預設地,無法將資料
/元素放置到其他元素中。如果需要設定允許放置,
則必須阻止對元素的預設事件,即:若想觸發ondrop事件,
ondragover 中
必須阻止預設事件。)所以
allowdrop(e)
函式裡通過
e.preventdefault()阻止了預設行為。
4. 我們知道了要把元素放到box這個div裡,而當我們放下元素時發生 ondrop事件,所以要在box這個div裡設定ondrop事件,該事件觸發handledrop(event)這個函式。
function handledrop(e)
通過 datatransfer.getdata("text") 方法獲得被拖的資料。該方法將返回在 setdata() 方法中設定的資料,因為之前setdata() 設定的是img的id值,所以這裡返回的就是相應img的id值。
接著通過document.getelementbyid(src)獲取的被拖元素
被拖元素
(img
)追加到目標元素
(div)中。
注: 在firefox 3.5+中,如果是把影象拖放到放置目標上,頁面就會轉向影象檔案;而如果是把文字拖放到放置目標上,則會導致無效url錯誤,因此,為了讓firefox支援正常的拖放,
還要取消drop事件的預設行為
,阻止它開啟url。
最後詳細介紹下:datatransfer物件
以下內容參考了:
datatransfer物件是事件物件的乙個屬性,
用於從被拖拽元素向目標
元素傳遞字串格式的資料。因為它是事件物件的屬性,所以只
有在獲取到事件物件的前體下才能
訪問datatransfer物件。
datatransfer物件有兩個主要的方法:getdata()方法和setdata()方法。setdata()方法的第乙個引數,也是getdata()方法唯一的乙個引數,是
用來儲存資料型別的
字串,取值是」text」或」url」。
將資料儲存在文字
「text
」和儲存為url是有區別的。如果將資料儲存為文字格式,那麼資料不會得到任何特殊處理。如果儲存為url格式,瀏覽器會將其當成網頁中的鏈結。如果你將這個url放置到另乙個瀏覽器視窗中,就可以開啟該url。
datatransfer物件
的dropeffect屬性和effectallowed屬性
運用datatransfer物件,不僅僅能傳輸資料,還能通過datatransfer物件確定被拖拽元素以及目標的元素能夠接收什麼操作。要實現這樣的功能就用到了dropeffect屬性和effectallowed屬性。
通過dropeffect屬性可以知道被拖動的元素能夠執行哪種行為。
有四個值
none:不能把拖動的元素放在這裡。這是除了文字框之外所有元素預設的值。
move:應該把拖動的元素
移動到放置目標。
copy:應該把拖動的元素
複製到放置目標。
把元素拖動到目標
元素上的時候,以上每乙個值都會導致游標顯示為不同的符號。光有dropeffect屬性是不咋管用的。只有結合effectallowed屬性一起使用才能發揮功效。effectallowed屬性表示允許拖動元素的哪種
(dropeffect)
行為。effectallowed屬性也有很多值,其值如下:
uninitialized:沒有給被拖動元素設定任何放置行為。
none:被拖動的元素不能有任何行為。
copy:只允許值為」copy」的dropeffect。
link:只允許值為」link」的dropeffect。
move:只允許值為」move」的dropeffect。
copylink:允許值為」copy」和」link」的dropeffect。
copymove:允許值為」copy」和」move」的dropeffect。
linkmove:允許值為」link」和」move」的dropeffect。
all:允許任意dropeffect。
注 :
要設定effectallowed屬性必須在ondragstart事件觸發的函式中設定
HTML5之拖拽功能
預設可拖動元素 draggable屬性 其他元素該屬性值為true,則可被拖動。chrome 可直接顯示拖動效果 firefox 需要為ondragstart事件指定 攜帶資料,才能顯示拖動效果。dragelement.ondragstart function evt 阻止放置物件的預設 drope...
html5 初探2 表單
乙個簡單的表單 by xufei 2013 04 css樣式,裡面有些 css3的東西 charset utf 8 body header footer select input content form 表單分組 form fieldset 表單分組 最後乙個 form fieldset last...
今天來說說html5的拖拽
先看demo datatransfer物件 退拽物件用來傳遞的媒介,使用一般為event.datatransfer draggable 給拖拽元素的draggable屬性設定成true 表示該元素可以進行拖拽了 ondragstart事件 拖拽元素開始拖拽的時候觸發的 ondragover事件 拖拽...