最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析原生JavaScript中拖拽屬性draggable的使用

 更新時間:2024年03月07日 11:16:19   作者:ZL不懂前端  
這篇文章主要為大家詳細(xì)介紹了原生JavaScript中拖拽屬性draggable使用的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

定義和用法

draggable 屬性規(guī)定元素是否可拖動。

提示: 鏈接和圖像默認(rèn)是可拖動的。

提示: draggable 屬性經(jīng)常用于拖放操作。

draggable 屬性是 HTML5 新增的。

語法

<element draggable="true|false|auto">

屬性值

描述
true規(guī)定元素是可拖動的。
false規(guī)定元素是不可拖動的。
auto使用瀏覽器的默認(rèn)特性。

draggable屬性的使用

draggable既然是拖放,那么主要是兩個角色比較重要:

(1)被拖動的元素A

(2)A被拖動以后放置的元素B

舉例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .one{
      width: 100px;
      height: 100px;
      background-color: red;
    }
    .two{
      width: 200px;
      height: 200px;
      background-color: springgreen;
    }
  </style>
</head>
<body>
  <div class="one" draggable="true">11</div>
  <div class="two">22</div>
  <script>
  </script>
</body>
</html>

效果

現(xiàn)在有兩個點(diǎn):

(1)拖動的元素要賦予draggable屬性,屬性值為true。

(2)被拖進(jìn)的元素要在dragover和dragenter事件值中阻止默認(rèn)行為。

<div class="one" draggable="true">11</div>
<div class="two" ondragover="handleOndragover(event)" ondragenter="handleOndragenter(event)">22</div>
<script>
  function handleOndragover(e){
    e.preventDefault();
  }
  function handleOndragenter(e){
    e.preventDefault();
  }
</script>

此時A元素可以拖入到B元素里面,但是只是視覺效果上的,一旦松開鼠標(biāo),就恢復(fù)原狀了

draggable屬性的API

針對被拖拽元素A

(1)dragstart方法

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

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

舉例:當(dāng)拖動A時,改變A元素的背景顏色為藍(lán)色

<div class="one" draggable="true" ondragstart="handleOndragstart(event)">11</div>
<div class="two" ondragover="handleOndragover(event)" ondragenter="handleOndragenter(event)">22</div>
<script>
  function handleOndragstart(e){
    e.target.style.backgroundColor='blue';
  }
  function handleOndragover(e){
    e.preventDefault();
  }
  function handleOndragenter(e){
    e.preventDefault();
  }
</script>

(2)drag方法

該方法發(fā)生在dragstart之后,只要是在拖動過程之中,該方法就會持續(xù)觸發(fā)

<div class="one" draggable="true" ondragstart="handleOndragstart(event)" ondrag="handleOndrag(event)">11</div>
<div class="two" ondragover="handleOndragover(event)" ondragenter="handleOndragenter(event)">22</div>
<script>
  function handleOndragstart(e){
    console.log('ondragstart');
  }
  function handleOndrag(e){
    console.log('ondrag');
  }
  function handleOndragover(e){
    e.preventDefault();
  }
  function handleOndragenter(e){
    e.preventDefault();
  }
</script>

(3)dragend方法

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

<div class="one" draggable="true" ondragstart="handleOndragstart(event)" ondrag="handleOndrag(event)" ondragend="handleOndragend(event)">11</div>
<div class="two" ondragover="handleOndragover(event)" ondragenter="handleOndragenter(event)">22</div>
<script>
  function handleOndragstart(e){
    console.log('ondragstart');
  }
  function handleOndrag(e){
    console.log('ondrag');
  }

  function handleOndragend(e){
    console.log('ondragend');
  }

  function handleOndragover(e){
    e.preventDefault();
  }
  function handleOndragenter(e){
    e.preventDefault();
  }
</script>

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

拖入元素B的事件

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

(1)dragenter方法

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

<div class="one" draggable="true" ondragstart="handleOndragstart(event)" ondrag="handleOndrag(event)" ondragend="handleOndragend(event)">11</div>
<div class="two" ondragover="handleOndragover(event)" ondragenter="handleOndragenter(event)">22</div>
<script>
  function handleOndragstart(e){
    console.log('ondragstart');
  }
  function handleOndrag(e){
    console.log('ondrag');
  }

  function handleOndragend(e){
    console.log('ondragend');
  }

  function handleOndragover(e){
    e.preventDefault();
  }
  function handleOndragenter(e){
    console.log('ondragenter');
    e.preventDefault();
  }
</script>

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

舉例: 當(dāng)A拖入到B中,我們希望A是真正成為B的子元素:

<div class="one" draggable="true" ondragstart="handleOndragstart(event)" ondrag="handleOndrag(event)" ondragend="handleOndragend(event)">11</div>
<div class="two" ondragover="handleOndragover(event)" ondragenter="handleOndragenter(event)">22</div>
<script>
  function handleOndragstart(e) {
    console.log('ondragstart');
  }
  function handleOndrag(e) {
    console.log('ondrag');
  }

  function handleOndragend(e) {
    console.log('ondragend');
  }

  function handleOndragover(e) {
    e.preventDefault();
  }
  function handleOndragenter(e) {
    e.preventDefault();
    e.target.appendChild(document.querySelector('.one'))
  }
</script>

(2)dragover方法

該方法只要是,拖拽元素A在目標(biāo)元素B中移動,就會持續(xù)觸發(fā)。(就是如果A在B區(qū)域內(nèi)懸浮,就會觸發(fā))

function handleOndragover(e) {
  e.preventDefault();
  console.log('ondragover');
}

(3)dragleave方法

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

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

function handleOndragleave(e){
  console.log('ondragleave');
}

(4)drop方法

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

例: 當(dāng)A拖入到B中,我們希望A是真正成為B的子元素:

function handleOndrop(e){
  console.log('ondrop');
  e.target.appendChild(document.querySelector('.one'))
}

總結(jié)

如果要實(shí)現(xiàn)拖放,需要具備以下條件

(1)拖動的元素要賦予draggable屬性,屬性值為true。

(2)最重要的三個事件:dragstart、dragover、drop

  • 被托動元素A需要設(shè)置draggable屬性、dragstart事件
  • 拖入元素B需要設(shè)置dragover、drop事件
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .one {
      width: 100px;
      height: 100px;
      background-color: red;
    }

    .two {
      width: 200px;
      height: 200px;
      background-color: springgreen;
    }
  </style>
</head>

<body>
  <div class="one" draggable="true" ondragstart="handleOndragstart(event)">11</div>
  <div class="two" ondragover="handleOndragover(event)" ondrop="handleOndrop(event)">22</div>
  <script>
    function handleOndragstart(e){
      console.log(e);
    }
    function handleOndragover(e){
      e.preventDefault();
    }
    function handleOndrop(e){
      e.target.appendChild(document.querySelector('.one'))
    }
  </script>
</body>

</html>

到此這篇關(guān)于淺析原生JavaScript中拖拽屬性draggable的使用的文章就介紹到這了,更多相關(guān)JavaScript拖拽屬性draggable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 給Function做的OOP擴(kuò)展

    給Function做的OOP擴(kuò)展

    自編框架Megami的一部分……現(xiàn)在發(fā)現(xiàn)自己實(shí)在太宅了…… 文件中出現(xiàn)的名字請對號入座……
    2009-05-05
  • 微信小程序?qū)崿F(xiàn)加入購物車滑動軌跡

    微信小程序?qū)崿F(xiàn)加入購物車滑動軌跡

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)加入購物車滑動軌跡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 選擇復(fù)選框按鈕置灰否則按鈕可用

    選擇復(fù)選框按鈕置灰否則按鈕可用

    這篇文章主要介紹了使用js實(shí)現(xiàn)選擇復(fù)選框按鈕置灰否則按鈕可用,需要的朋友可以參考下
    2014-05-05
  • 基于JavaScript實(shí)現(xiàn)動態(tài)創(chuàng)建表格和增加表格行數(shù)

    基于JavaScript實(shí)現(xiàn)動態(tài)創(chuàng)建表格和增加表格行數(shù)

    這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)動態(tài)創(chuàng)建表格和增加表格行數(shù)的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • JavaScript常用的返回,自動跳轉(zhuǎn),刷新,關(guān)閉語句匯總

    JavaScript常用的返回,自動跳轉(zhuǎn),刷新,關(guān)閉語句匯總

    這篇文章主要介紹了JavaScript常用的返回,自動跳轉(zhuǎn),刷新,關(guān)閉語句,實(shí)例匯總了常用的javascript技巧,非常具有實(shí)用價值,需要的朋友可以參考下
    2015-01-01
  • JS跳出循環(huán)的5種方法總結(jié)(return、break、continue、throw等)

    JS跳出循環(huán)的5種方法總結(jié)(return、break、continue、throw等)

    想必大家都遇到過循環(huán)遍歷時遇到滿足條件的時候就跳出循環(huán)這樣的需求,于是整理了一篇各種循環(huán)是如何結(jié)束的,這篇文章主要給大家介紹了關(guān)于JS跳出循環(huán)的5種方法,分別是return、break、continue、throw等的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • uniapp表單驗(yàn)證方法詳解

    uniapp表單驗(yàn)證方法詳解

    From表單組件具有數(shù)據(jù)收集、提交數(shù)據(jù)的功能,某種程度上說它就是一個容器,下面這篇文章主要給大家介紹了關(guān)于uniapp表單驗(yàn)證的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 如何在TypeScript?中實(shí)現(xiàn)接口的類

    如何在TypeScript?中實(shí)現(xiàn)接口的類

    這篇文章主要介紹了TypeScript?中實(shí)現(xiàn)接口的類,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • JavaScript中閉包的4個有用技巧分享

    JavaScript中閉包的4個有用技巧分享

    當(dāng)談到JavaScript編程中的高級概念和技巧時,閉包(Closures)是一個重要而有趣的主題,閉包是一種函數(shù)與其創(chuàng)建時的詞法環(huán)境的組合,它允許我們捕獲和保留局部變量,并在函數(shù)之外使用它們,在這篇文章中,我們將深入探討JavaScript中閉包的4種有用技巧
    2023-10-10
  • ajax java 實(shí)現(xiàn)自動完成功能

    ajax java 實(shí)現(xiàn)自動完成功能

    都知道百度建議是用ajax做的,想要做的快速穩(wěn)定,可復(fù)制可移植就不容易了,花時間研究還不如自己來寫。根據(jù)一個pdf文檔提供的資料,用了小半天時間,終于實(shí)現(xiàn)了。在此與大家分享
    2012-12-12

最新評論

巩义市| 沂水县| 峨眉山市| 镇坪县| 霍州市| 濉溪县| 资阳市| 胶南市| 麻城市| 宜君县| 务川| 乌海市| 宽城| 镇平县| 壤塘县| 定远县| 香港| 甘泉县| 越西县| 临汾市| 平阴县| 凌海市| 临漳县| 盈江县| 伊金霍洛旗| 长春市| 徐汇区| 福安市| 涟源市| 逊克县| 泸州市| 绵竹市| 通渭县| 廉江市| 开封市| 察哈| 宜丰县| 吴江市| 巧家县| 门头沟区| 财经|