HTML拖放

3.1 拖拽屬性

draggable:auto | true | false

<div id="mydiv" draggable="true"></div>

3.2 拖動(dòng)事件

屬性 解釋
dragstart(托) 當(dāng)一個(gè)原不俗開始被拖拽的時(shí)候觸發(fā)
drag(托) 這個(gè)事件在拖拽源觸發(fā)
dragend(托) 拖拽源在拖拽操作結(jié)束將得到dragend事件對(duì)象薪丁,不管操作成功與否常侦。
dragenter(放) 當(dāng)拖拽中的鼠標(biāo)第一次進(jìn)入一個(gè)元素的時(shí)候觸發(fā)戏溺。
dragover(放) 當(dāng)拖拽中的鼠標(biāo)移動(dòng)經(jīng)過一個(gè)元素的時(shí)候觸發(fā)
dragleave(放) 當(dāng)拖拽的鼠標(biāo)離開元素時(shí)觸發(fā)
drop(放) 這個(gè)事件在拖拽操作結(jié)束釋放元素上觸發(fā)譬猫。

3.3 拖操作

    <div id="mydiv" draggable="true"></div>
    <script>
        // 拖放操作
        let mydiv = document.getElementById('mydiv')
        //開始拖放
        mydiv.ondragstart = function(){
            console.log('開始拖放');
        }
        // 正在拖放
        mydiv.ondrag = function(){
            console.log('正在拖放');
        }
        // 結(jié)束拖放
        mydiv.ondragend = function(){
            console.log('正在拖放'); 
        }
    </script>

3.4 放操作

注意:放操作中 ”dragover和drop“ 會(huì)發(fā)生沖突,需要阻止 dragover 的默認(rèn)事件( e.preventDefault() )

<div id="put" draggable="true"></div>
<script>
        // 放操作
        let myput = document.getElementById('put')
        // 進(jìn)入
        myput.ondragenter = function(e){
            console.log('進(jìn)入了');
        }
        // 進(jìn)故宮
        myput.ondragover = function(e){
            console.log('經(jīng)過了');
            // 阻止默認(rèn)事件
            e.preventDefault();
        }
        // 離去
        myput.ondragleave = function(){
            console.log('離去了');
        }
        // 放下
        myput.ondrop = function(){
            console.log('放下了');   
        }
</script>

3.5 拖和放的API操作

3.5.1 拖放事件

一般在一個(gè)元素開始被拖拽的時(shí)候,觸發(fā)dragstart時(shí)候設(shè)置與這次拖拽相關(guān)的信息弧烤,例如拖動(dòng)的數(shù)據(jù)和圖像。所有的拖拽事件都有一個(gè)屬性——dataTransfer源武,它包含著拖拽數(shù)據(jù)扼褪。

3.5.2 dataTransfer的屬性說明
屬性/方法 說明
files 其屬性返回和防止相關(guān)的所有文件
types 屬性使用數(shù)組的形式返回當(dāng)前注冊(cè)的格式
effectAllowed 此屬性的意思為通知瀏覽器當(dāng)前可被用戶選用的操作,如果只設(shè)置 copy粱栖,這只允許執(zhí)行出 copy 工作
dropEffect 拖放的操作類型话浇,決定了瀏覽器如何顯示鼠標(biāo)形狀,可能的值為 copy闹究,move幔崖,link 和 none
items 屬性返回所有項(xiàng)與相關(guān)格式的所有文件
setData( format,data) dragstart 事件調(diào)用此函數(shù)在 dataTransfe 對(duì)象上的存儲(chǔ)數(shù)據(jù)。
getData(format) dataTransfer 對(duì)象取出數(shù)據(jù)
setDragImage(element,x,y) 使用存在的圖像元素作為拖動(dòng)圖像(x,y 表示鼠標(biāo)位置)
addElement(element) 調(diào)用此函數(shù)需要提供一個(gè)頁面元素作為參考,同時(shí)使用此參數(shù)作為拖放反饋圖像
clearData() 不傳參數(shù)赏寇,表示清空所有已注冊(cè)數(shù)據(jù)吉嫩,帶參數(shù)則清楚指定的注冊(cè)數(shù)據(jù)
3.5.3 演示示例:
    <div id="contains"></div>
    <div id="div1" class="myBlock" draggable="true">1</div>
    <div id="div2" class="myBlock" draggable="true">2</div>
    <div id="div3" class="myBlock" draggable="true">3</div>
    <div id="div4" class="myBlock" draggable="true">4</div>
    <div id="div5" class="myBlock" draggable="true">5</div>
    <script>
        // 元素的拖
        let myBlock = document.querySelectorAll('.myBlock')
        for(let i = 0; i< myBlock.length; i++){
            myBlock[i].ondragstart = function(e){
                // dataTransfer是 event事件
                // 儲(chǔ)存id
                e.dataTransfer.setData('id',this.id)
                // 設(shè)置拖放時(shí) 物體的顯示
                let img = new Image();
                img.src = './素材.jpg'
                e.dataTransfer.setDragImage(img,img.width/2,img.height/2)
                // 為啥 第一次不顯示?
            }
        }
        
        // 放
        let contains = document.getElementById('contains')
        // 1嗅定,阻止 ondragover的默認(rèn)事件
        contains.ondragover = function(e){
            e.preventDefault();
            
        }
        // 托 的元素放下時(shí)
        contains.ondrop = function(e){
            // 獲取之前存儲(chǔ)的 id
            let id = e.dataTransfer.getData('id')
            // 根據(jù)id 獲取當(dāng)前元素
            let div = document.getElementById(id)
            this.appendChild(div)
            
        }
    </script>
3.5.4 外部文件的操作

注意: 托外部文件需要取消 ondrop 的默認(rèn)事件自娩,否則會(huì)打開這個(gè)文件

<script>

        let html = document.documentElement;
        // 取消默認(rèn)事件,防止打開文件
        html.ondragover = function(e){
            e.preventDefault();
        }
        // 文件拖放
        html.ondrop = function(e){
            // 取消默認(rèn)事件
            e.preventDefault()

            let img = new Image();
            // 獲取文件路徑
            img.src = window.URL.createObjectURL(e.dataTransfer.files[0])
            img.style.top = e.pageY + 'px';
            img.style.left = e.pageX + 'px';
            document.body.appendChild(img)
            
        }
 </script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渠退,隨后出現(xiàn)的幾起案子忙迁,更是在濱河造成了極大的恐慌,老刑警劉巖碎乃,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姊扔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梅誓,警方通過查閱死者的電腦和手機(jī)恰梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梗掰,“玉大人嵌言,你說我怎么就攤上這事〖八耄” “怎么了呀页?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拥坛。 經(jīng)常有香客問我,道長(zhǎng)尘分,這世上最難降的妖魔是什么猜惋? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮培愁,結(jié)果婚禮上著摔,老公的妹妹穿的比我還像新娘。我一直安慰自己定续,他們只是感情好谍咆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著私股,像睡著了一般摹察。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倡鲸,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天供嚎,我揣著相機(jī)與錄音,去河邊找鬼。 笑死克滴,一個(gè)胖子當(dāng)著我的面吹牛逼争,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劝赔,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼誓焦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了着帽?” 一聲冷哼從身側(cè)響起杂伟,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎启摄,沒想到半個(gè)月后稿壁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歉备,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年傅是,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕾羊。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喧笔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出龟再,到底是詐尸還是另有隱情书闸,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布利凑,位于F島的核電站浆劲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哀澈。R本人自食惡果不足惜牌借,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望割按。 院中可真熱鬧膨报,春花似錦、人聲如沸适荣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弛矛。三九已至够吩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丈氓,已是汗流浹背废恋。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工谈秫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鱼鼓。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓拟烫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親迄本。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硕淑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的置媳。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,493評(píng)論 1 11
  • ??HTML5 規(guī)范了很多新 HTML 標(biāo)記。為了配合這些標(biāo)記的變化靶橱,HTML5 規(guī)范也用顯著篇幅定義了很多 Ja...
    霜天曉閱讀 708評(píng)論 0 1
  • 之前寫過一篇瀏覽器事件的相關(guān)操作和事件運(yùn)行的原理——JavaScript瀏覽器事件解析寥袭。這一篇主要寫一些常用的事件...
    faremax閱讀 1,624評(píng)論 0 0
  • 本節(jié)介紹各種常見的瀏覽器事件。 鼠標(biāo)事件 鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件关霸,主要有以下一些传黄。 click 事件,dblc...
    許先生__閱讀 2,438評(píng)論 0 4
  • 拖放事件 H5的拖放事件提供了多個(gè)接口: 1队寇、drag:當(dāng)元素或者選中的文本被拖動(dòng)時(shí)觸發(fā)(每幾百毫秒觸發(fā)一次)膘掰,應(yīng)...
    用技術(shù)改變世界閱讀 1,435評(píng)論 0 0