JS的拖拽屬性draggable詳解
摘要
作為h5新增的屬性draggable,它能夠給與一切的html元素拖動的效果。而在這個屬性之下,也有著關於拖動效果的各個方法。
而這一篇文章,主要就是說一下關於draggable屬性的使用以及工作場景。
1.瞭解draggable屬性的使用
對我來講,我希望在學習一個知識的時候,最開始就有顯而易見的效果,所以我先寫一個能夠讓人感受到draggable屬性作用的例子:
對於拖拽,常見的場景一定有兩個角色:
(1)拖動的元素A
(2)A被拖進的元素
現在我們在body中創建兩個元素:
<body> <div id="Adiv" class="A"> A---拖拽的元素 </div> <div id="Bdiv" class="B"> B---A被拖進的元素 </div> </body>
現在我們牢記兩個點:
(1)拖動的元素要賦予draggable屬性,屬性值為true
(2)被拖進的元素要在dragover和dragenter事件值中阻止默認行為。先不需要知道這兩個事件是做什麼的。我們就先這樣寫!
<body> <div draggable="true" id="Adiv" class="A"> A---拖拽的元素 </div> <div id="Bdiv" class="B"> B---A被拖進的元素 </div> </body> <script> Bdiv.ondragover = function(e){ e.preventDefault(); } Bdiv.ondragenter = function(e){ e.preventDefault(); } </script>
此時A元素就是可以拖入到B元素裡面
(這個時候註意瞭,僅僅是效果上的拖入,不可能讓A真正的成為B的子元素,松開鼠標後還是會恢復原樣的)
2.拖動元素A的事件
Ok,現在知道瞭兩個重要的角色A和B,現在我們先針對於A,在它拖動的過程中,我們可以控制的事件有哪些:
(1)dragstart方法:
該方法在按下鼠標並且移動鼠標時,會在A上觸發該方法。同時鼠標的光標會變成禁用的樣子,直到拖動到允許放置A的元素上,禁用的效果就會消失
而允許放置A的元素,就是剛剛說的在dragover和dragenter中阻止默認行為
現在我們用一個例子來演示這個方法,我希望在拖動A的時候,能讓A本身變成黃色背景:
Adiv.ondragstart = function(){ this.style.backgroundColor = 'yellow' }
(2)drag方法
該方法發生在dragstart之後,隻要時在拖動過程之中,該方法就會持續觸發
Adiv.ondrag = function(){ console.log('drag事件'); }
(3)dragend方法
該方法是在拖動結束的時候觸發,也就是當你拖拽後,松開鼠標的一瞬間觸發。
上面的三個方法,就是針對於被拖拽的元素的。也就是賦予draggable屬性為true的元素。
一般我們比較常用的方法就是dragstrat方法,通過在這個方法中將被推拽的元素進行保存下來,再進行後續的操作。
3.拖入元素B的事件
針對於拖入元素的事件,它不需要元素具有draggable屬性,隻要你想,任何元素使用這些方法都是可以的。但要記住上面所說的那兩個方法,阻止事件默認行為。
(1)dragenter方法
該方法是指拖拽元素A,在拖入到B之中,B所觸發的事件。當然,任何具有draggable屬性為true的元素,拖入到B中,都會觸發改事件。
切記,這裡事件的觸發不需要松開鼠標
現在我們用一個例子來說明,當A拖入到B中,我們希望A是真正成為B的子元素:
Bdiv.ondragenter = function(e){ e.preventDefault(); this.appendChild(Adiv); }
(2)dragover方法
該方法隻要是,拖拽元素A在目標元素B中移動,就會持續觸發。
Bdiv.ondragover = function(e){ console.log('dragover事件'); e.preventDefault(); }
(3)dragleave方法
該方法指的是拖拽元素A,在從目標元素B中離開的時候,會觸發該方法
這裡記住,一定是先進入到B,再離開B的時候觸發該事件,也就是說要先觸發dragenter方法,才能觸發dragleave方法
(4)drop方法
該方法是指,拖拽元素A被放置瞭目標元素B中的時候觸發,那它和dragenter方法的區別在於,該方法需要鼠標松開才會觸發。而這個方法也是最常用的方法。
到此這篇關於JS的拖拽屬性draggable的文章就介紹到這瞭,更多相關js拖拽屬性draggable內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!