H5新增API-元素拖拽

元素拖拽要使用html5的新增屬性draggable="true",實際上這個屬性默認(rèn)就是true,但是以防不兼容,所以建議手動添加此屬性。

<!DOCTYPE html>
<html>
<head>
    <title>drag</title>
    <style type="text/css">
        .box1, .box2{
            float: left;
            width: 200px;
            height: 150px;
            box-shadow: 0 2px 2px #000;
            margin:20px;
        }
        .box{
            width: 50px;
            height: 50px;
            background: red;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box" draggable="true"></div>
    </div>
    <div class="box2">  
    </div>
</body>
<script type="text/javascript">
    var box = document.querySelector(".box");
    var target = document.querySelector(".box2");
    box.ondragstart = function(){
        console.log(1,"開始");
    }
    box.ondrag = function(){
        console.log(2,"拖拽中");
    }
    box.ondragend = function(){
        console.log(3,"拖拽結(jié)束");
    }
    target.ondragenter = function(){
        console.log(4,"進(jìn)入目標(biāo)元素");
    }
    target.ondragleave = function(){
        console.log(5,"離開目標(biāo)元素");
    }
    target.ondragover = function(){
        console.log(6,"在目標(biāo)元素上移動");
    }
    target.ondrop = function(){
        console.log(7,"在目標(biāo)元素上放手");
                target.appendChild(box);
    }
</script>
</html>

console.log(7,"在目標(biāo)元素上放手");在默認(rèn)情況下是不會顯示的,因為:瀏覽器默認(rèn)禁止在元素上drop,禁止將其他元素拖拽到目標(biāo)元素上放手。
需要在dragover時阻止瀏覽器的默認(rèn)事件,才能觸發(fā)ondrop。
在函數(shù)ondragstart中可以使用e來接收全局的事件,e.dataTransfer.setData可以設(shè)置數(shù)據(jù),既可以設(shè)置一個字符串,也可以使用目標(biāo)對象的屬性。
box.ondragstart = function(e){
console.log(1,"開始");
console.log(e.dataTransfer);
// e.dataTransfer.setData("text","Hello");
e.dataTransfer.setData("text",e.target.id);
}

dataTransfer 貫穿整個拖拽生命周期的承載對象
dataTranser.setData(format,content)

  • format: 數(shù)據(jù)格式,支持text URL 或其它MIME類型
  • content: 要傳遞的內(nèi)容

e.dataTransfer.effectAllowed設(shè)置拖拽元素的鼠標(biāo)效果

  • 常見的有:copy link move all copyLink ...
    當(dāng)指定為none時,ondropystart里設(shè)置

e.dataTransfer.dropEffect設(shè)置目標(biāo)元素的鼠標(biāo)效果
如果和effectAllowed同時指定,則必須與effectAllowed值相同,否則無法放置拖拽元素。

阻止瀏覽器默認(rèn)的下載或打開文件,直接讀取圖片并顯示:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .box{
        width: 600px;
        height: 80px;
        line-height: 80px;
        border:1px solid;
        border-radius: 5px;
        margin:0 auto;
        text-align: center;
        font-size: 3rem;
    }
</style>
<body>
    <div class="box">拖拽文件到此處</div>
</body>
<script type="text/javascript">
    var box = document.querySelector(".box");
    box.ondragover = function(e){
        e.preventDefault();
    }
    box.ondrop = function(e){
        e.preventDefault();
        var files = e.dataTransfer.files;
        for (var i = 0; i < files.length; i++) {
            var file =  files[i];
            var fr = new FileReader();
            fr.readAsDataURL(file);
            fr.onload = function(){
                var img = new Image();
                img.src = this.result;
                document.body.appendChild(img);
            }
        }
    }
</script>
</html>
最后編輯于
?著作權(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)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • H5 meta詳解 viewport width:控制 viewport 的大小,可以指定的一個值,如果 600,...
    FConfidence閱讀 889評論 0 3
  • 一、HTML5 1.1 認(rèn)識HTML5 HTML5并不僅僅只是作為HTML標(biāo)記語言的一個最新版本,更重要的是它制定...
    福爾摩雞閱讀 16,545評論 14 51
  • 1.處理步驟 a.定義可拖動目標(biāo) b.定義被拖動的數(shù)據(jù),可能為多種不同的格式 c.允許設(shè)置拖拽效果 d.定義放置區(qū)...
    阿迪呀dity閱讀 1,716評論 0 3
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 14,154評論 1 92

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