首頁技術(shù)文章正文

HTML的拖拽接口介紹【web前端培訓(xùn)】

更新時(shí)間:2019-10-08 來源:黑馬程序員 瀏覽量:

1. 什么是拖拽?

本質(zhì)上來說就是一個(gè)對象和一個(gè)對象直接傳遞。其實(shí)學(xué)習(xí)拖拽,就是學(xué)習(xí)拖拽事件。

2.在HTML5中很多元素是不能進(jìn)行拖拽的,比如說圖片和超鏈接,在試圖拖拽時(shí)你會(huì)發(fā)現(xiàn)一個(gè)禁止的符號(hào),如果想拖拽元素,就必須為元素添加draggable="true"。(推薦了解黑馬程序員web前端培訓(xùn)課程


3.相關(guān)的事件:

應(yīng)用于被拖拽元素的事件

ondrag 應(yīng)用于拖拽元素,整個(gè)拖拽過程都會(huì)調(diào)用--持續(xù)

ondragstart 應(yīng)用于拖拽元素,當(dāng)拖拽開始時(shí)調(diào)用

ondragleave 應(yīng)用于拖拽元素,當(dāng)鼠標(biāo)離開拖拽元素時(shí)調(diào)用

ondragend 應(yīng)用于拖拽元素,當(dāng)拖拽結(jié)束時(shí)調(diào)用

應(yīng)用于目標(biāo)元素的事件

ondragenter 應(yīng)用于目標(biāo)元素,當(dāng)拖拽元素進(jìn)入時(shí)調(diào)用

ondragover 應(yīng)用于目標(biāo)元素,當(dāng)停留在目標(biāo)元素上時(shí)調(diào)用

ondrop 應(yīng)用于目標(biāo)元素,當(dāng)在目標(biāo)元素上松開鼠標(biāo)時(shí)調(diào)用

ondragleave 應(yīng)用于目標(biāo)元素,當(dāng)鼠標(biāo)離開目標(biāo)元素時(shí)調(diào)用

案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .div1{
            width: 200px;
            height: 200px;
            border: 1px solid red;
            position: relative;
            margin-left:20px;
            float: left;
        }
        .div2{
            width: 200px;
            height: 200px;
            border: 1px solid blue;
            position: relative;
            margin-left:20px;
            float: left;
        }
        .div3{
            width: 200px;
            height: 200px;
            border: 1px solid green;
            position: relative;
            margin-left:20px;
            float: left;
        }
        p{
            background-color: orange;
            margin-top: 5px;
        }
    </style>
</head>
<body>
<div class="div1" id="div1">
    <p id="pe" draggable="true">試著把我拖過去</p>
    <p id="pe1" draggable="true">試著也把我拖過去</p>
</div>
<div class="div2" id="div2"></div>
<div class="div3" id="div3"></div>
<script>
    var obj=null;//當(dāng)前被拖拽的地元素
 
    document.ondragstart=function(e){
        /*通過事件捕獲來獲取當(dāng)前被拖拽的子元素*/
        e.target.style.opacity=0.5;
        e.target.parentNode.style.borderWidth="5px";
        obj= e.target;
        /*通過dataTransfer來實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與獲取
        * setData(format,data):
        * format:數(shù)據(jù)的類型:text/html   text/uri-list
        * Data:數(shù)據(jù):一般來說是字符串值*/
        e.dataTransfer.setData("text/html", e.target.id);
    }
    document.ondragend=function(e){
        e.target.style.opacity=1;
        e.target.parentNode.style.borderWidth="1px";
    }
    document.ondragleave=function(e){
    }
    document.ondrag=function(e){
    }
 
    document.ondragenter=function(e){
        console.log(e.target);
    }
    document.ondragover=function(e){
        e.preventDefault();
    }
    /*瀏覽器默認(rèn)會(huì)阻止ondrop事件:我們必須在ondragover中阻止瀏覽器的默認(rèn)行為*/
    document.ondrop=function(e){
        /*添加元素*/
        //e.target.appendChild(obj);
        /*通過e.dataTransfer.setData存儲(chǔ)的數(shù)據(jù),只能在drop事件中獲取*/
        var id=e.dataTransfer.getData("text/html");
        /*console.log("id="+id);*/
        e.target.appendChild(document.getElementById(id));
    }
    document.ondragleave=function(e){
    }


分享到:
在線咨詢 我要報(bào)名
和我們在線交談!