茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    突襲HTML5之Javascript API擴(kuò)展4—拖拽(Drag/Drop)概述
    來源:易賢網(wǎng) 閱讀:1830 次 日期:2016-07-22 14:47:48
    溫馨提示:易賢網(wǎng)小編為您整理了“突襲HTML5之Javascript API擴(kuò)展4—拖拽(Drag/Drop)概述”,方便廣大網(wǎng)友查閱!

    拖拽(Drag/Drop)是個(gè)非常普遍的功能。你可以抓住一個(gè)對(duì)象,并且拖動(dòng)到你想放置的區(qū)域。很多javascript都類似實(shí)現(xiàn)了相關(guān)的功能,例如,jQueryUI的draganddrop組件。在HTML5中,拖拽(draganddrop)成為了標(biāo)準(zhǔn)操作,任何元素都支持。正因?yàn)檫@個(gè)功能太普遍了,所有的主流瀏覽器都支持這個(gè)操作。

    啟用拖拽-draggable屬性

    非常簡單,只需要將一個(gè)元素的拖動(dòng)屬性修改為draggable,這個(gè)元素就支持拖動(dòng)了,如下所示:

    代碼如下:

    <imgdraggable="true"/>

    拖動(dòng)中數(shù)據(jù)的傳遞

    拖動(dòng)的過程中,我們往往需要傳遞相應(yīng)的邏輯數(shù)據(jù)來完成轉(zhuǎn)換的過程,這里主要是使用dataTransfer對(duì)象進(jìn)行數(shù)據(jù)傳遞,下面先看看它的成員:

    方法成員:

    代碼如下:

    setData(format,data):把被拖動(dòng)的數(shù)據(jù)賦值給dataTransfer對(duì)象。

    format:一個(gè)String型參數(shù),指定被拖動(dòng)數(shù)據(jù)的類型。該參數(shù)取值可以是“Text”(文本類型)和“URL”(URL類型)。該參數(shù)是大小寫無關(guān)的,所以傳入"text"與"Text"是一樣的。

    data:一個(gè)變體類型參數(shù),指定被拖動(dòng)的數(shù)據(jù)。該數(shù)據(jù)可以是文本,圖片路徑,URL等等。

    該函數(shù)有Boolean類型的返回值,true表示數(shù)據(jù)成功加到dataTransfer中,false代表不成功。如果需要,可以通過這個(gè)參數(shù)來決定是否應(yīng)該繼續(xù)執(zhí)行某些邏輯。

    代碼如下:

    getData(format):獲取dataTransfer中存放的拖動(dòng)數(shù)據(jù)。

    format意義與setData中的一樣,取值可以是"Text"(文本類型)和"URL"(URL類型)。

    代碼如下:

    clearData(format):移除指定類型的數(shù)據(jù)。

    這里的format除了上面可以指定的"Text"(文本類型)和"URL"(URL類型)外,還可以取下列值:file-文件,html-html元素,image-圖片。

    這個(gè)方法可以用于去選擇性的處理拖動(dòng)的數(shù)據(jù)類型。

    屬性成員:

    代碼如下:

    effectAllowed:設(shè)置或獲取數(shù)據(jù)源元素中的數(shù)據(jù)可以執(zhí)行的操作。

    屬性類型為字符串,取值范圍如下:

    "copy"-復(fù)制數(shù)據(jù).

    "link"-鏈接數(shù)據(jù).

    "move"-移動(dòng)數(shù)據(jù)

    "copyLink"-復(fù)制或鏈接數(shù)據(jù),由目標(biāo)對(duì)象來確定。

    "copyMove"-復(fù)制或移動(dòng)數(shù)據(jù),由目標(biāo)對(duì)象來確定。

    "linkMove"-鏈接或移動(dòng)數(shù)據(jù),由目標(biāo)對(duì)象來確定。

    "all"-所有的操作都是支持的。

    "none"-禁止拖動(dòng)。

    "uninitialized"-默認(rèn)值,采用默認(rèn)的行為。

    注意設(shè)置effectAllowed為none以后,拖動(dòng)是禁止的,但是鼠標(biāo)形狀還是顯示沒有可拖動(dòng)的對(duì)象的形狀,如果想不顯示這個(gè)鼠標(biāo)形狀,則需要將window的event事件的屬性returnValue設(shè)置為false。

    代碼如下:

    dropEffect:設(shè)置或獲取拖動(dòng)的目標(biāo)上允許的操作以及相關(guān)的鼠標(biāo)形狀。

    屬性類型為字符串,取值范圍如下:

    "copy"-鼠標(biāo)顯示為復(fù)制時(shí)的形狀;

    "link"-鼠標(biāo)顯示為連接的形狀;

    "move"-鼠標(biāo)顯示為移動(dòng)的形狀。

    "none"(默認(rèn)值)-鼠標(biāo)顯示為沒有拖動(dòng)的形狀。

    effectAllowed指定了數(shù)據(jù)源支持的操作,所以通常在ondragstart事件中指定。dropEffect指定了拖動(dòng)放置的目標(biāo)支持的操作,所以與effectAllowed配合,通常在拖動(dòng)的目標(biāo)上的ondragenter,ondragover和ondrop等事件中使用。

    代碼如下:

    files:返回拖動(dòng)的文件的列表FileList。

    types:ondragstart中發(fā)送的數(shù)據(jù)(被拖動(dòng)的數(shù)據(jù))類型的列表。

    dataTransfer對(duì)象的存在,使得在拖動(dòng)的數(shù)據(jù)源和目標(biāo)元素之間傳遞邏輯數(shù)據(jù)變成了可能。通常我們使用setData方法在數(shù)據(jù)源元素的ondragstart事件中提供數(shù)據(jù),然后再目標(biāo)元素中,使用getData方法獲取數(shù)據(jù)。

    拖動(dòng)中觸發(fā)的事件

    下面是一次拖拽會(huì)發(fā)生的事件,基本上事件的觸發(fā)順序也就是下面的順序:

    代碼如下:

    dragstart:要被拖拽的元素開始拖拽時(shí)觸發(fā),這個(gè)事件對(duì)象是被拖拽元素。

    drag:拖拽元素時(shí)觸發(fā),這個(gè)事件對(duì)象是被拖拽元素。

    dragenter:拖拽元素進(jìn)入目標(biāo)元素時(shí)觸發(fā),這個(gè)事件對(duì)象是目標(biāo)元素。

    dragover:拖拽某元素在目標(biāo)元素上移動(dòng)時(shí)觸發(fā),這個(gè)事件對(duì)象是目標(biāo)元素。

    dragleave:拖拽某元素離開目標(biāo)元素時(shí)觸發(fā),這個(gè)事件對(duì)象是目標(biāo)元素。

    drop:將被拖拽元素放在目標(biāo)元素內(nèi)時(shí)觸發(fā),這個(gè)事件對(duì)象是目標(biāo)元素。

    dragend:在drop之后觸發(fā),就是拖拽完畢時(shí)觸發(fā),這個(gè)事件對(duì)象是被拖拽元素。

    基本上事件的參數(shù)event都會(huì)傳入相關(guān)的元素,可以很方便的進(jìn)行一些修改。這里,我們并不需要處理每個(gè)事件,通常只需要掛接主要的幾個(gè)事件即可。

    拖動(dòng)開始-ondragstart事件

    從這個(gè)事件傳入的參數(shù)含有的信息非常豐富,從中可以很方便的獲取到被拖動(dòng)的元素(event.Target);從中可以設(shè)置被拖動(dòng)數(shù)據(jù)(event.dataTransfer.setData);所以你可以很方便實(shí)現(xiàn)拖動(dòng)的背后邏輯(當(dāng)然你綁定的時(shí)候也可以傳遞其他的參數(shù))。

    拖動(dòng)過程中-ondrag,ondragover,ondragenter和ondragleave事件

    ondrag事件的對(duì)象是被拖拽元素,通常這個(gè)事件處理的比較少。ondragenter事件是當(dāng)拖動(dòng)進(jìn)入當(dāng)前元素時(shí)發(fā)生,ondragleave事件是在當(dāng)拖動(dòng)離開當(dāng)前元素時(shí)發(fā)生,ondragover事件是在拖動(dòng)在當(dāng)前元素中移動(dòng)時(shí)發(fā)生。

    這里只需要注意一點(diǎn),因?yàn)槟J(rèn)情況下,瀏覽器是禁止元素drop的,所以為了讓元素可以drop,需要在這個(gè)函數(shù)中返回false或者調(diào)用event.preventDefault()方法。如下面的例子所示。

    拖動(dòng)結(jié)束-ondrop,ondragend事件

    當(dāng)可拖動(dòng)的數(shù)據(jù)被drop的時(shí)候,drop事件觸發(fā)。drop結(jié)束后,dragend事件被觸發(fā),這個(gè)事件使用的也相對(duì)少一點(diǎn)。

    看一個(gè)簡單的例子:

    代碼如下:

    <!DOCTYPEHTML>

    <html>

    <head>

    <scripttype="text/javascript">

    functionallowDrop(ev){

    ev.preventDefault();

    }

    functiondrag(ev){

    ev.dataTransfer.setData("Text",ev.target.id);

    }

    functiondrop(ev){

    vardata=ev.dataTransfer.getData("Text");

    ev.target.appendChild(document.getElementById(data));

    ev.preventDefault();

    }

    </script>

    </head>

    <body>

    <divid="div1"ondrop="drop(event)"ondragover="allowDrop(event)"></div>

    <imgid="drag1"src="img_logo.gif"draggable="true"ondragstart="drag(event)"width="336"height="69"/>

    </body>

    </html>

    文件拖拽

    上面的例子已經(jīng)使用了dataTransfer的各種方法和屬性,下面再看網(wǎng)上的另外一個(gè)有趣的應(yīng)用:拖拽一個(gè)圖片到網(wǎng)頁上,然后在網(wǎng)頁上顯示。這個(gè)應(yīng)用用到了dataTransfer的files屬性。

    代碼如下:

    <!DOCTYPEHTML>

    <html>

    <head>

    <metacharset="utf-8">

    <title>HTML5拖放文件</title>

    <style>

    #section{font-family:"Georgia","微軟雅黑","華文中宋";}

    .container{display:inline-block;min-height:200px;min-width:360px;color:#f30;padding:30px;border:3pxsolid#ddd;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;}

    .preview{max-width:360px;}

    #files-list{position:absolute;top:0;left:500px;}

    #list{width:460px;}

    #list.preview{max-width:250px;}

    #listp{color:#888;font-size:12px;}

    #list.green{color:#09c;}

    </style>

    </head>

    <body>

    <divid="section">

    <p>把你的圖片拖到下面的容器內(nèi):</p>

    <divid="container"class="container">

    </div>

    <divid="files-list">

    <p>已經(jīng)拖進(jìn)過來的文件:</p>

    <ulid="list"></ul>

    </div>

    </div>

    <script>

    if(window.FileReader){

    varlist=document.getElementById('list'),

    cnt=document.getElementById('container');

    //判斷是否圖片

    functionisImage(type){

    switch(type){

    case'image/jpeg':

    case'image/png':

    case'image/gif':

    case'image/bmp':

    case'image/jpg':

    returntrue;

    default:

    returnfalse;

    }

    }

    //處理拖放文件列表

    functionhandleFileSelect(evt){

    evt.stopPropagation();

    evt.preventDefault();

    varfiles=evt.dataTransfer.files;

    for(vari=0,f;f=files[i];i++){

    vart=f.type?f.type:'n/a',

    reader=newFileReader(),

    looks=function(f,img){

    list.innerHTML+='<li><strong>'+f.name+'</strong>('+t+

    ')-'+f.size+'bytes<p>'+img+'</p></li>';

    cnt.innerHTML=img;

    },

    isImg=isImage(t),

    img;

    //處理得到的圖片

    if(isImg){

    reader.onload=(function(theFile){

    returnfunction(e){

    img='<imgclass="preview"src="'+e.target.result+'"title="'+theFile.name+'"/>';

    looks(theFile,img);

    };

    })(f)

    reader.readAsDataURL(f);

    }else{

    img='"o((>ω<))o",你傳進(jìn)來的不是圖片??!';

    looks(f,img);

    }

    }

    }

    //處理插入拖出效果

    functionhandleDragEnter(evt){this.setAttribute('style','border-style:dashed;');}

    functionhandleDragLeave(evt){this.setAttribute('style','');}

    //處理文件拖入事件,防止瀏覽器默認(rèn)事件帶來的重定向

    functionhandleDragOver(evt){

    evt.stopPropagation();

    evt.preventDefault();

    }

    cnt.addEventListener('dragenter',handleDragEnter,false);

    cnt.addEventListener('dragover',handleDragOver,false);

    cnt.addEventListener('drop',handleFileSelect,false);

    cnt.addEventListener('dragleave',handleDragLeave,false);

    }else{

    document.getElementById('section').innerHTML='你的瀏覽器不支持啊,同學(xué)';

    }

    </script>

    </body>

    </html>

    這個(gè)例子中使用了html5中的文件讀取API:FileReader對(duì)象;該對(duì)象提供了下列異步方法用于讀取文件:

    1.FileReader.readAsBinaryString(fileBlob)

    以二進(jìn)制的方式讀取文件,result屬性會(huì)包含一個(gè)文件的二進(jìn)制的格式

    2.FileReader.readAsText(fileBlob,opt_encoding)

    以文本的方式讀取文件,result屬性將會(huì)包含一個(gè)文件的文本格式,默認(rèn)解碼參數(shù)是“utf-8”。

    3.FileReader.readAsDataURL(file)

    以URL形式讀取文件result將會(huì)包含一個(gè)文件的DataURL格式(圖片通常用這種方式)。

    當(dāng)使用上面的方法讀取文件后,會(huì)觸發(fā)下列事件:

    代碼如下:

    onloadstart,onprogress,onabort,onerror,onload,onloadend

    這些事件都很簡單,需要的時(shí)候掛接就可以了??聪旅娴拇a示例:

    代碼如下:

    functionstartRead(){

    //obtaininputelementthroughDOM

    varfile=document.getElementById('file').files[0];

    if(file){

    getAsText(file);

    }

    }

    functiongetAsText(readFile){

    varreader=newFileReader();

    //ReadfileintomemoryasUTF-16

    reader.readAsText(readFile,"UTF-16");

    //Handleprogress,success,anderrors

    reader.onprogress=updateProgress;

    reader.onload=loaded;

    reader.onerror=errorHandler;

    }

    functionupdateProgress(evt){

    if(evt.lengthComputable){

    //evt.loadedandevt.totalareProgressEventproperties

    varloaded=(evt.loaded/evt.total);

    if(loaded<1){

    //Increasetheprogbarlength

    //style.width=(loaded*200)+"px";

    }

    }

    }

    functionloaded(evt){

    //Obtainthereadfiledata

    varfileString=evt.target.result;

    //HandleUTF-16filedump

    if(utils.regexp.isChinese(fileString)){

    //ChineseCharacters+Namevalidation

    }

    else{

    //runothercharsettest

    }

    //xhr.send(fileString)

    }

    functionerrorHandler(evt){

    if(evt.target.error.name=="NotReadableErr"){

    //Thefilecouldnotberead

    }

    }

    這里也簡單說一下:普通的文件下載使用的就是window.open方法,例如:

    代碼如下:

    window.open('http://aaa.bbbb.com/ccc.rar','_blank')

    更多信息請查看網(wǎng)頁制作
    易賢網(wǎng)手機(jī)網(wǎng)站地址:突襲HTML5之Javascript API擴(kuò)展4—拖拽(Drag/Drop)概述
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026國考·省考課程試聽報(bào)名

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)