拖拽API

一、拖拽API

設(shè)置對象可以拖動

<img draggable="true" />

事件

dragover有一個默認行為?。?!那就是當dragover觸發(fā)時,drop會失效?。。?!

    source.addEventListener('dragstart',function(ev){   
        console.log('源對象開始被拖動');
    },false)
   source.addEventListener('drag',function(ev){   
        console.log('源對象被拖動過程中(鼠標可能在移動也可能未移動)');
    },false)
   source.addEventListener('dragend',function(ev){   
        console.log('源對象被拖動結(jié)束');
    },false)

    process.addEventListener('dragenter',function(ev){  
        console.log('目標對象被源對象拖動著進入');
    },false)
    process.addEventListener('dragleave',function(ev){ 
        console.log('源對象拖動著離開了目標對象');
    },false)
   process.addEventListener('dragover',function(ev){  
        console.log('目標對象被源對象拖動著懸停在上方');
    },false)

    target.addEventListener('drop',function(ev){        // drop事件由c元素產(chǎn)生
        console.log('源對象拖動著在目標對象上方釋放/松手');
        ev.preventDefault();
    },false)
    document.ondragover = function(e){e.preventDefault();}

dataTransfer 對象

  • 在所有拖放事件中提供了一個數(shù)據(jù)傳遞對象 dataTransfer,用于在源對象和目標對象間傳遞數(shù)據(jù)。

setData()
該方法向 dataTransfer 對象中存入數(shù)據(jù)。接收兩個參數(shù),第一個表示要存入數(shù)據(jù)種類的字符串,現(xiàn)在支持有以下幾種:

text/plain:文本文字。
text/html:HTML文字。
text/xml:XML文字。
text/uri-list:URL列表,每個URL為一行。
第二個參數(shù)為要存入的數(shù)據(jù)。例如:

event.dataTransfer.setData('text/plain','Hello World');

getData()
該方法從 dataTransfer 對象中讀取數(shù)據(jù)。參數(shù)為在 setData 中指定的數(shù)據(jù)種類。例如:

event.dataTransfer.getData('text/plain');

clearData()
該方法清除 dataTransfer 對象中存放的數(shù)據(jù)。參數(shù)可選,為數(shù)據(jù)種類。若參數(shù)為空,則清空所有種類的數(shù)據(jù)。例如:

event.dataTransfer.clearData();

setDragImage()
該方法通過用img元素來設(shè)置拖放圖標。接收三個參數(shù),第一個為圖標元素,第二個為圖標元素離鼠標指針的X軸位移量,第三個為圖標元素離鼠標指針的Y軸位移量。例如:

var source = document.getElementById('source'),
    icon = document.createElement('img');

icon.src = 'img.png';

source.addEventListener('dragstart',function(ev){
    ev.dataTransfer.setDragImage(icon,-10,-10)
},false)
屬性 描述
dropEffect 表示拖放操作的視覺效果,允許對其進行值的設(shè)定。該效果必須在用effectAllowed屬性指定的允許的視覺效果范圍內(nèi),允許指定的值有:none、copy、link、move。
effectAllowed 用來指定當元素被拖放時所允許的視覺效果。可以指定的值有:none、copy、copyLink、copyMove、link、linkMove、all、uninitialize。
files 返回表示被拖拽文件的 FileList。
types 存入數(shù)據(jù)的MIME類型。如果任意文件被拖拽,那么其中一個類型將會是字符串”Files”。

圖片拖拽到網(wǎng)頁中并讀取

container.ondrop = function(e){
      console.log('客戶端拖動著一張圖片釋放了...')
      //當前的目標對象讀取拖放源對象存儲的數(shù)據(jù)
      //console.log(e.dataTransfer); //顯示有問題
      //console.log(e.dataTransfer.files.length); //拖進來的圖片的數(shù)量
      var f0 = e.dataTransfer.files[0];
      //console.log(f0); //文件對象 File
 
      //從文件對象中讀取數(shù)據(jù)
      var fr = new FileReader();
      //fr.readAsText(f0); //從文件中讀取文本字符串
      fr.readAsDataURL(f0); //從文件中讀取URL數(shù)據(jù)
      fr.onload = function(){
        console.log('讀取文件完成')
        console.log(fr.result);
        var img = new Image();
        img.src = fr.result; //URL數(shù)據(jù)
        container.appendChild(img);
      }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容