這篇文章將為大家詳細(xì)講解有關(guān)HTML5中dataTransfer對象的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)服務(wù)項目包括江山網(wǎng)站建設(shè)、江山網(wǎng)站制作、江山網(wǎng)頁制作以及江山網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,江山網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到江山省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
雖然通過dragstart、drag和dragend事件實現(xiàn)了原生拖拽。但是這僅僅是拖拽,在IE6和IE7中還是有些拖拽問題,并且也沒有實現(xiàn)數(shù)據(jù)的交換。為了實現(xiàn)數(shù)據(jù)的交換,IE5引入了dataTransfer對象。dataTransfer對象是事件對象的一個屬性,用于從被拖拽元素相放置目標(biāo)傳遞字符串格式的數(shù)據(jù)。因為它是事件對象的屬性,所以只能在拖放事件的事件處理程序中訪問dataTransfer對象。在事件處理程序中,可以使用這個對象的屬性和方法來完善拖放功能。
dataTransfer對象有兩個主要的方法:getData()方法和setData()方法。從這兩個方法的英文字面意思上就能大概猜出來其用途。getData()方法可以取得由setData()方法保存的值。setData()方法的第一個參數(shù),也是getData()方法唯一的一個參數(shù),是用來保存數(shù)據(jù)類型的字符串,取值是”text”或”URL”。
IE只定義了”text”或”URL”兩種有效的數(shù)據(jù)類型,而HTML5則對此加以擴(kuò)展,允許指定各種MIME類型??紤]到向后兼容,HTML5也支持”text”或”URL”,但這兩種類型會被映射為”text/plain”或”text/url-list”。
實際上,dataTransfer對象可以為每種MIME類型都保存一個值。也就是說同事在這個對象中保存一段文本和一個URL不會有其他問題。不過,保存在dataTransfer對象中的數(shù)據(jù)只能在drop事件處理程序中讀取。如果在ondrop處理程序中沒有讀取數(shù)據(jù),那就是dataTransfer對象已經(jīng)被銷毀,數(shù)據(jù)也就隨之丟失了。
在拖動文本框中的文本時,瀏覽器會調(diào)用setData()方法,將拖動的文本以”text”格式保存在dataTransfer對象中。類似地,在拖放鏈接或圖像時,會調(diào)用setData()方法并保存URL。然后,在這些元素被拖放到放置目標(biāo)時,就可以通過getData()方法讀到這些數(shù)據(jù)。當(dāng)然,作為開發(fā)人員,你也可以通過dragstart事件處理程序中調(diào)用setData(),手工保存自己要傳輸?shù)臄?shù)據(jù),以便將來使用。
將數(shù)據(jù)保存在文本和保存為URL是有區(qū)別的。如果將數(shù)據(jù)保存為文本格式,那么數(shù)據(jù)不會得到任何特殊處理。如果保存為URL格式,瀏覽器會將其當(dāng)成網(wǎng)頁中的鏈接。如果你將這個URL放置到另一個瀏覽器窗口中,就可以打開該URL。
Firefox 5及之前版本是不能將”url”和”text”映射為””和”text/plain”。但是卻能把”Text”(T大寫)映射為”text/plain”。為了更好地在跨瀏覽器的情況下從dataTransfer對象取得數(shù)據(jù),最好在取得URL數(shù)據(jù)時檢測兩個值,而在取得文本數(shù)據(jù)時使用”Text”。
注意,一定要把短數(shù)據(jù)類型放在前面,因為IE10及之前的版本仍然不支持?jǐn)U展的MIME類型名,而它們在遇到無法識別的數(shù)據(jù)類型時,會報錯。不過”text”或”URL”取值只有IE是強(qiáng)制的,在火狐3.6+、Chrome和Opera中設(shè)置其他任意值的字符串也能正常執(zhí)行。
運(yùn)用dataTransfer對象,不僅僅能傳輸數(shù)據(jù),還能通過dataTransfer對象確定被拖拽的元素以及作為放置目標(biāo)的元素能夠接收什么操作。要實現(xiàn)這樣的功能就用到了dropEffect屬性和effectAllowed屬性。
其中,通過dropEffect屬性可以知道被拖動的元素能夠執(zhí)行哪種行為。這個屬性的四個值如下:
none:不能把拖動的元素放在這里。這是除了文本框之外所有元素默認(rèn)的值。
move:應(yīng)該把拖動的元素移動到放置目標(biāo)。
copy:應(yīng)該把拖動的元素復(fù)制到放置目標(biāo)。
link:放置目標(biāo)會打開拖動的元素(但拖動的元素必須是個鏈接,有URL地址)。
把元素拖動到放置目標(biāo)上的時候,以上每一個值都會導(dǎo)致光標(biāo)顯示為不同的符號。
光有dropEffect屬性是不咋管用的。只有結(jié)合effectAllowed屬性一起使用才能發(fā)揮功效。effectAllowed屬性表示允許拖動元素的哪種行為(dropEffect)。effectAllowed屬性也有很多值,其值如下:
uninitialized:沒有給被拖動元素設(shè)置任何放置行為。
none:被拖動的元素不能有任何行為。
copy:只允許值為”copy”的dropEffect。
link:只允許值為”link”的dropEffect。
move:只允許值為”move”的dropEffect。
copyLink:允許值為”copy”和”link”的dropEffect。
copyMove:允許值為”copy”和”move”的dropEffect。
linkMove:允許值為”link”和”move”的dropEffect。
all:允許任意dropEffect。
要設(shè)置effectAllowed屬性必須在ondragstart事件處理程序中設(shè)置。小例子如下
HTML代碼
[html] view plaincopyprint?
夢龍小站
CSS代碼
[css] view plaincopyprint? li{ width:100px; height:30px; border:1px #000000 solid; margin:20px; list-style:none;} #p1{ width:100px; height:100px; background:red; margin:300px;}
JavaScript代碼
[javascript] view plaincopyprint? //dataTransfer對象 : 連接拖拽細(xì)節(jié)的 ,在event對象下面的 //拖動不帶鏈接的li,會起作用但不跳轉(zhuǎn)鏈接 //拖動帶連接的a,會起作用也跳轉(zhuǎn) window.onload = function(){ var aLi = document.getElementsByTagName('li'); var aA = document.getElementsByTagName('a'); var op = document.getElementById('p1'); for(var i=0;i
關(guān)于“HTML5中dataTransfer對象的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。