溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JS的拖拽屬性draggable怎么使用

發(fā)布時(shí)間:2023-04-28 10:32:54 來源:億速云 閱讀:137 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“JS的拖拽屬性draggable怎么使用”,在日常操作中,相信很多人在JS的拖拽屬性draggable怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”JS的拖拽屬性draggable怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

1.了解draggable屬性的使用

對(duì)于拖拽,常見的場(chǎng)景一定有兩個(gè)角色:

(1)拖動(dòng)的元素A
(2)A被拖進(jìn)的元素

現(xiàn)在我們?cè)赽ody中創(chuàng)建兩個(gè)元素:

<body>
  <div id="Adiv" class="A">
    A---拖拽的元素
  </div>
  <div id="Bdiv" class="B">
    B---A被拖進(jìn)的元素
  </div>
</body>

JS的拖拽屬性draggable怎么使用

現(xiàn)在我們牢記兩個(gè)點(diǎn):

(1)拖動(dòng)的元素要賦予draggable屬性,屬性值為true
(2)被拖進(jìn)的元素要在dragover和dragenter事件值中阻止默認(rèn)行為。先不需要知道這兩個(gè)事件是做什么的。我們就先這樣寫!

<body>
  <div draggable="true" id="Adiv" class="A">
    A---拖拽的元素
  </div>
  <div id="Bdiv" class="B">
    B---A被拖進(jìn)的元素
  </div>
</body>

<script>
  Bdiv.ondragover = function(e){
    e.preventDefault();
  }
  Bdiv.ondragenter = function(e){
    e.preventDefault();
  }
</script>

此時(shí)A元素就是可以拖入到B元素里面

(這個(gè)時(shí)候注意了,僅僅是效果上的拖入,不可能讓A真正的成為B的子元素,松開鼠標(biāo)后還是會(huì)恢復(fù)原樣的)

JS的拖拽屬性draggable怎么使用

2.拖動(dòng)元素A的事件

Ok,現(xiàn)在知道了兩個(gè)重要的角色A和B,現(xiàn)在我們先針對(duì)于A,在它拖動(dòng)的過程中,我們可以控制的事件有哪些:

(1)dragstart方法:

該方法在按下鼠標(biāo)并且移動(dòng)鼠標(biāo)時(shí),會(huì)在A上觸發(fā)該方法。同時(shí)鼠標(biāo)的光標(biāo)會(huì)變成禁用的樣子,直到拖動(dòng)到允許放置A的元素上,禁用的效果就會(huì)消失

而允許放置A的元素,就是剛剛說的在dragover和dragenter中阻止默認(rèn)行為

現(xiàn)在我們用一個(gè)例子來演示這個(gè)方法,我希望在拖動(dòng)A的時(shí)候,能讓A本身變成黃色背景:

  Adiv.ondragstart = function(){
    this.style.backgroundColor = 'yellow'
  }

JS的拖拽屬性draggable怎么使用

(2)drag方法

該方法發(fā)生在dragstart之后,只要時(shí)在拖動(dòng)過程之中,該方法就會(huì)持續(xù)觸發(fā)

  Adiv.ondrag = function(){
    console.log('drag事件');
  }

JS的拖拽屬性draggable怎么使用

(3)dragend方法

該方法是在拖動(dòng)結(jié)束的時(shí)候觸發(fā),也就是當(dāng)你拖拽后,松開鼠標(biāo)的一瞬間觸發(fā)。

上面的三個(gè)方法,就是針對(duì)于被拖拽的元素的。也就是賦予draggable屬性為true的元素。

一般我們比較常用的方法就是dragstrat方法,通過在這個(gè)方法中將被推拽的元素進(jìn)行保存下來,再進(jìn)行后續(xù)的操作。

3.拖入元素B的事件

針對(duì)于拖入元素的事件,它不需要元素具有draggable屬性,只要你想,任何元素使用這些方法都是可以的。但要記住上面所說的那兩個(gè)方法,阻止事件默認(rèn)行為。

(1)dragenter方法

該方法是指拖拽元素A,在拖入到B之中,B所觸發(fā)的事件。當(dāng)然,任何具有draggable屬性為true的元素,拖入到B中,都會(huì)觸發(fā)改事件。

切記,這里事件的觸發(fā)不需要松開鼠標(biāo)

現(xiàn)在我們用一個(gè)例子來說明,當(dāng)A拖入到B中,我們希望A是真正成為B的子元素:

  Bdiv.ondragenter = function(e){
    e.preventDefault();
    this.appendChild(Adiv);
  }

JS的拖拽屬性draggable怎么使用

(2)dragover方法

該方法只要是,拖拽元素A在目標(biāo)元素B中移動(dòng),就會(huì)持續(xù)觸發(fā)。

  Bdiv.ondragover = function(e){
    console.log('dragover事件');
    e.preventDefault();
  }

JS的拖拽屬性draggable怎么使用

(3)dragleave方法

該方法指的是拖拽元素A,在從目標(biāo)元素B中離開的時(shí)候,會(huì)觸發(fā)該方法

這里記住,一定是先進(jìn)入到B,再離開B的時(shí)候觸發(fā)該事件,也就是說要先觸發(fā)dragenter方法,才能觸發(fā)dragleave方法

(4)drop方法

該方法是指,拖拽元素A被放置了目標(biāo)元素B中的時(shí)候觸發(fā),那它和dragenter方法的區(qū)別在于,該方法需要鼠標(biāo)松開才會(huì)觸發(fā)。而這個(gè)方法也是最常用的方法。

到此,關(guān)于“JS的拖拽屬性draggable怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI