H5拖拽刪除文件

在 HTML5 中,拖放是標準的一部分,任何元素都可以拖放。

全局屬性draggable :標籤設置draggable=true後,就可以被拖拽:瀏覽器

<img src="touxiang.jpg" draggable="true">

單純地給元素加上draggable屬性,也只能在鼠標按住、拖拽、放開時看到特效,它僅僅證實該元素是能夠被拖拽的。app

要實現真正的拖拽刪除文件,拖拽上傳文件等等效果,必須結合Drag & Drop API開發。HTML5提供專門的拖拽與拖放的API性能

舉個栗子學習

 

在實現網頁拖拽丟棄的特效的話,首先要學習Drag and Drop API提供的1個對象和4個事件lua

DataTransfer對象用來保存,經過拖放動做,拖動到瀏覽器的數據。spa

提供setData方法爲一個給定的類型設置數據;getData方法根據指定的類型檢索數據。code

 

先來作個小練習,熟悉DataTransfer對象怎麼結合拖拽事件使用對象

<img id="drag1" src="touxiang.jpg" draggable="true" ondragstart="drag(event)" width="200" height="200">
function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

已設置一張圖片爲被拖拽元素,設置被拖數據的數據類型爲「text」、值是被拖拽元素的id-->"drag1"blog

圖片能夠拖拽了,可是將它安放何處呢?事件

<div id="div1" ondrop="drop(event)"></div>
 function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}

將id爲div1的元素綁定ondrop事件,使用getData方法獲取剛纔存儲在dataTransfer中的對象,而後將其追加在div中。至此,一個簡單拖拽效果就完成啦!

可是,當你複製以上兩段代碼打開瀏覽器運行時,發現並無什麼luan用~~~看看上面總結了4個事件的用法,剛纔的代碼中只用到2個,呵~就知道事情沒這麼簡單。

ondragover 事件默認地沒法將數據/元素放置到其餘元素中。若是須要設置容許放置,咱們必須阻止對元素的默認處理方式。

此時,須要在div1上再綁定ondragover事件

function allowDrop(ev) {
    ev.preventDefault(); //阻止瀏覽器默認行爲
}
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

如何使用H5+Darg and Drop API開發完成拖拽效果已經學會了,如今來完成剛纔舉的栗子吧:

奉上完整代碼:

……省略HTML……
//定義變量
var eleDustbin = document.getElementById('dustbin'),//垃圾桶
    eleDrags = document.getElementsByClassName('draglist'),//待丟棄垃圾
    eleRemind = document.getElementById('dragremind'),//提示語
    eleDrag = null;
for (var i=0; i<eleDrags.length; i++) {
    //拖拽開始
    eleDrags[i].ondragstart = function(ev) {
        ev.dataTransfer.setData("text", ev.target.id);
        eleDrag = ev.target;
        //return true;
    };
    //拖拽結束
    eleDrags[i].ondragend = function(ev) {
        ev.dataTransfer.clearData("text");
        eleDrag = null;
        //return false
    };
}
//拖拽元素在目標元素頭上移動的時候
eleDustbin.ondragover = function(ev) {
    ev.preventDefault();
    //return true;
};
//拖拽元素進入目標元素頭上,同時鼠標鬆開的時候
eleDustbin.ondrop = function(ev) {
    if (eleDrag) {
        eleRemind.innerHTML += '<b>"' + eleDrag.childNodes[0].alt+ '"</b>被扔進了垃圾箱<br/>';
        eleDrag.parentNode.removeChild(eleDrag);
    }
    return false;   //避免觸發瀏覽器自帶的事件
};

過去在網頁中基本上都是使用DOM事件模型中的mousedown、mousemove、mouseup監聽來模擬拖拽效果,

這種方式存在代碼冗長,性能低下等問題,由於不停地修改元素位置會致使頁面reflow。

相關文章
相關標籤/搜索