欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

H5如何實(shí)現(xiàn)拖放API-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)H5如何實(shí)現(xiàn)拖放API,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、平陽(yáng)網(wǎng)站維護(hù)、網(wǎng)站推廣。

一、一個(gè)簡(jiǎn)單的例子--地上有石子撿幾個(gè)吧

    地上有石子,撿幾個(gè)吧
    
    
        
        
        
    
    
    我是籃子    
    
    我是地
    
        石子
        石子
        石子
        石子
        石子
        石子
        石子
        石子
        石子
        石子

 ?。╣if演示是用的edge,我的ubuntu做gif太麻煩了,借了個(gè)windows)

  H5如何實(shí)現(xiàn)拖放API

  這里用一個(gè)簡(jiǎn)單的例子演示了如何實(shí)現(xiàn)拖放,那么問(wèn)題來(lái)了,從上面的演示中你可以猜出一些屬性和方法的用法了,那些方法的作用究竟是怎樣的?那些個(gè)屬性又是啥意思呢?下面一一到來(lái)。

二、實(shí)現(xiàn)拖放的一般步驟

  1、找到一個(gè)可拖的元素

  正如不是所有人都叫大熊一樣,并不是所有的元素都是可以被拖的。img和a元素默認(rèn)可拖,其他元素默認(rèn)不可拖,當(dāng)時(shí)可以加一個(gè)draggable=true讓它可拖。

<p draggable='true'></p>

  2、處理拖放有關(guān)事件

  源對(duì)象:

  • dragstart:源對(duì)象開(kāi)始拖放。

  • drag:源對(duì)象拖放過(guò)程中。

  • dragend:源對(duì)象拖放結(jié)束。

  過(guò)程對(duì)象:

  • dragenter:源對(duì)象開(kāi)始進(jìn)入過(guò)程對(duì)象范圍內(nèi)。

  • dragover:源對(duì)象在過(guò)程對(duì)象范圍內(nèi)移動(dòng)。

  • dragleave:源對(duì)象離開(kāi)過(guò)程對(duì)象的范圍。

  目標(biāo)對(duì)象:

  • drop:源對(duì)象被拖放到目標(biāo)對(duì)象內(nèi)。

  我們可以用一個(gè)測(cè)試來(lái)看看這些事件的觸發(fā)時(shí)機(jī)和事件對(duì)象為何物。

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>testEvents</title>
    <style type="text/css">
        .source{
            width: 50px;
            height: 50px;
            border: 1px solid red;
        }
        .process{
            width: 100px;
            height: 100px;
            border: 1px solid black;
            margin-top: 10px;
        }
        .dest{
            width: 100px;
            height: 100px;
            border: 1px solid green;
            margin-top: 10px;
        }
    </style></head><body>
    <p class="source" id="source" draggable="true"></p>
    <p class="process" id="process"></p>
    <p class="dest" id="dest"></p>
    <script type="text/javascript">
    window.onload=function(){        var source = document.getElementById("source");        var process = document.getElementById("process");        var dest = document.getElementById("dest");        var sourceEle;

        source.addEventListener("dragstart",function(e){
            console.log("source dragstart");
            console.log(e);
            sourceEle = e.target;            var dt = e.dataTransfer;
            dt.effectedAllowed = "all";
        },false);

        process.addEventListener("dragenter",function(e){
            console.log("process dragenter");
            console.log(e);
        },false);

        process.addEventListener("dragover",function(e){
            console.log("process dragover");
            console.log(e);
        },false);

        process.addEventListener("dragleave",function(e){
            console.log("process dragleave");
            console.log(e);
        },false);

        source.addEventListener("drag",function(e){
            console.log("source drag");
            console.log(e);
        },false);

        dest.addEventListener("dragend",function(e){
            console.log("dest dragend");
            console.log(e);
            e.preventDefault();
        },false);

        dest.addEventListener("drop",function(e){
            console.log("dest drop");
            console.log(e);
            dest.appendChild(sourceEle);
            e.preventDefault();
            e.stopPropagation();
        },false);

        document.ondragover = function(e){e.preventDefault();}
        document.ondrop = function(e){e.preventDefault();}
    }    </script></body></html>

  這個(gè)例子將拖放過(guò)過(guò)程涉及的事件做了一個(gè)羅列,這里不再細(xì)講,你可以查看控制臺(tái)看看事件的觸發(fā)順序和事件對(duì)象。

三、一個(gè)重要的對(duì)象DataTransfer對(duì)象

  這里首字母大寫(xiě)了,嚴(yán)格說(shuō)叫做一個(gè)類(lèi),每一次拖放會(huì)實(shí)例化這個(gè)類(lèi),保存在事件對(duì)象的dataTransfer屬性中。其屬性和方法見(jiàn)下表(來(lái)自:http://www.cnblogs.com/ijjyo/p/4316232.html)

  感謝這位兄臺(tái)的總結(jié),拿了你這么多東西,謝謝啊。

H5如何實(shí)現(xiàn)拖放API  

  H5如何實(shí)現(xiàn)拖放API

H5如何實(shí)現(xiàn)拖放API

  下面做一些簡(jiǎn)單的測(cè)試

  關(guān)于effectAllowed和dropEffect,這里將前者置為effectAllowed后者用下拉列表選擇,以便于看到不同的鼠標(biāo)樣式。

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>testEvents</title>
    <style type="text/css">
        .source{
            width: 50px;
            height: 50px;
            border: 1px solid red;
        }
        .process{
            width: 100px;
            height: 100px;
            border: 1px solid black;
            margin-top: 10px;
        }
        .dest{
            width: 100px;
            height: 100px;
            border: 1px solid green;
            margin-top: 10px;
        }
    </style></head><body>
    <select id="dpe">
        <option value="copy">copy</option>
        <option value="move">move</option>
        <option value="link">link</option>
        <option value="none">none</option>
    </select>
    <p class="source" id="source" draggable="true"></p>
    <p class="process" id="process"></p>
    <p class="dest" id="dest"></p>
    <script type="text/javascript">
    window.onload=function(){        var source = document.getElementById("source");        var process = document.getElementById("process");        var dest = document.getElementById("dest");        var dpe = document.getElementById("dpe");        var dpev;

        dpe.onchange = function(){
            dpev = this.value;
        }        var sourceEle;

        source.addEventListener("dragstart",function(e){
            console.log("source dragstart");
            console.log(e);
            sourceEle = e.target;            var dt = e.dataTransfer;
            dt.effectedAllowed = "all";
        },false);

        dest.addEventListener("dragend",function(e){
            console.log("dest dragend");
            console.log(e);
            e.preventDefault();
        },false);

        dest.addEventListener("drop",function(e){
            console.log("dest drop");
            console.log(e);
            dest.appendChild(sourceEle);
            e.preventDefault();
            e.stopPropagation();
        },false);

        document.ondragover = function(e){
            e.dataTransfer.dropEffect = dpev;
            e.preventDefault();
        }
        document.ondrop = function(e){e.preventDefault();}
    }    </script></body></html>

  我在ubuntu chrome測(cè)試法現(xiàn),都是一個(gè)手,但是置為none時(shí)拖不進(jìn)去了,可能不同系統(tǒng)會(huì)有一些差別。

  關(guān)于setData()和getData()方法

   這兩個(gè)是有關(guān)數(shù)據(jù)交換的方法,前者傳兩個(gè)參數(shù),第一參數(shù)是一個(gè)mime類(lèi)型字符串,第二個(gè)是數(shù)據(jù);后者傳一個(gè)參數(shù),為mime類(lèi)型??捎胢ime類(lèi)型為text/plain,text/html,text/xml,text/uri-list.

  測(cè)試用例,將菜單的菜拖到記錄本上。

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>點(diǎn)菜</title>
    <style type="text/css">
        .menu{
            width: 200px;
            height: 300px;
            border: 1px solid red;
            margin-right: 10px;
            float: left;
        }
        .record{
            width: 200px;
            height: 300px;
            border: 1px solid black;
            margin-right: 10px;
            float: left;
        }
    </style></head><body>
    <ul class="menu" id="menu">
        <li draggable="true">糖醋排骨</li>
        <li draggable="true">青椒肉絲</li>
        <li draggable="true">武昌魚(yú)</li>
        <li draggable="true">手撕包材</li>
        <li draggable="true">千葉豆腐</li>    
    </ul>
    <ul class="record" id="record">
        
    </ul>
    <script type="text/javascript">
        window.onload = function(){            var menu = document.getElementById("menu");            var record = document.getElementById("record");

            menu.addEventListener("dragstart",function(e){                var dt = e.dataTransfer;                var tar = e.target;                if(tar.tagName=="LI"){
                    dt.setData("text/plain",tar.innerHTML);
                }
                dt.effectedAllowed = "all";
            },false);

            record.addEventListener("drop",function(e){                var li  = document.createElement("li");
                li.appendChild(document.createTextNode(e.dataTransfer.getData("text/plain")));
                record.appendChild(li);
                e.stopPropagation();
            },false);

            record.addEventListener("dropend",function(e){
                e.preventDefault();
            },false);

            document.addEventListener("dragover",function(e){e.preventDefault()},false);

            document.addEventListener("drop",function(e){e.preventDefault()},false);
        }    </script></body></html>

關(guān)于setDragImage(Element img,long x,long y)

  這個(gè)方法是設(shè)置拖放時(shí)的圖標(biāo)的,第一個(gè)參數(shù)表是圖標(biāo)元素,第二個(gè)表示相對(duì)與光標(biāo)的水平偏移,第三個(gè)是垂直的。

  還是前面的例子,在dragstart事件添加下面的代碼,拖動(dòng)時(shí)你會(huì)發(fā)現(xiàn)一只很大的手(不要被嚇到);

var img = document.createElement("img");
                img.src = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1493802056263&di=232de2c30491e19f32833669ad5a67ae&imgtype=0&src=http%3A%2F%2Fstatic.freepik.com%2Ffree-photo%2Fone-finger_318-10333.jpg";
                dt.setDragImage(img,10,10);

四、關(guān)于拖放數(shù)據(jù)傳遞

  上面的例子已經(jīng)談到了拖放的數(shù)據(jù)傳遞方法,這里在總結(jié)一下。

  1、通過(guò)dataTransfer的setData()和getData()方法傳遞

  2、通過(guò)閉包的方法,請(qǐng)參考開(kāi)篇的例子。

五、總結(jié)

  HTML5的拖放api非常簡(jiǎn)潔實(shí)用,為我們省去了很多麻煩,如果沒(méi)有它,我們可能需要通過(guò)mousedownmousemove等等事件才能實(shí)現(xiàn)上述功能。本文較為詳細(xì)的介紹了相關(guān)api,希望對(duì)你有所幫助。關(guān)于拖放api的應(yīng)用大家可以參看下面鏈接的文章,他做了一個(gè)拖放排序,這是一個(gè)比較常見(jiàn)的應(yīng)用場(chǎng)景。

關(guān)于H5如何實(shí)現(xiàn)拖放API就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前名稱(chēng):H5如何實(shí)現(xiàn)拖放API-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://chinadenli.net/article18/ddicgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、定制網(wǎng)站、服務(wù)器托管、品牌網(wǎng)站建設(shè)、搜索引擎優(yōu)化ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站