>  기사  >  웹 프론트엔드  >  HTML5 Javascript API 확장 4에 대한 Raid - 드래그/드롭 개요_html5 튜토리얼 팁

HTML5 Javascript API 확장 4에 대한 Raid - 드래그/드롭 개요_html5 튜토리얼 팁

WBOY
WBOY원래의
2016-05-16 15:49:591426검색

드래그/드롭은 매우 일반적인 기능입니다. 개체를 잡고 배치하려는 영역으로 끌 수 있습니다. 많은 자바스크립트는 jQueryUI의 드래그 앤 드롭 구성 요소와 같은 유사한 기능을 구현합니다. HTML5에서는 드래그 앤 드롭이 표준 작업이 되었으며 모든 요소에서 지원됩니다. 이 기능은 매우 일반적이기 때문에 모든 주요 브라우저에서 이 작업을 지원합니다.
드래그 가능 속성 활성화
아래와 같이 요소의 드래그 속성을 드래그 가능으로 변경하기만 하면 됩니다.

코드 복사
코드는 다음과 같습니다.


드래그하는 동안 데이터 전송
드래그하는 동안 변환 프로세스를 완료하기 위해 해당 논리 데이터를 전송해야 하는 경우가 많습니다. 여기서는 주로 dataTransfer 개체를 사용합니다. 데이터 전송을 위해 해당 멤버를 살펴보겠습니다.
메서드 멤버:

코드 복사
코드는 다음과 같습니다.

setData(format,data): 드래그한 데이터를 dataTransfer 개체에 할당합니다.

형식: 드래그되는 데이터 유형을 지정하는 문자열 매개변수. 이 매개변수의 값은 "Text"(텍스트 유형) 및 "URL"(URL 유형)일 수 있습니다. 이 매개변수는 대소문자 독립적이므로 "text"와 "Text"를 전달하는 것은 동일합니다.
data: 드래그된 데이터를 지정하는 변형 유형 매개변수입니다. 데이터는 텍스트, 이미지 경로, URL 등이 될 수 있습니다.
이 함수에는 부울 반환 값이 있습니다. true는 데이터가 dataTransfer에 성공적으로 추가되었음을 의미하고 false는 실패를 의미합니다. 필요한 경우 이 매개변수를 사용하여 특정 논리를 계속 실행해야 하는지 여부를 결정할 수 있습니다.

코드 복사
코드는 다음과 같습니다.

getData(format): Get dataTransfer 드래그 데이터에 저장된 데이터.

format의 의미는 setData와 동일하며 값은 "Text"(텍스트 유형) 및 "URL"(URL 유형)일 수 있습니다.

코드 복사
코드는 다음과 같습니다.

clearData(형식): 제거 지정된 유형 데이터.

위에서 지정할 수 있는 "텍스트"(텍스트 유형) 및 "URL"(URL 유형) 외에도 여기서 형식은 다음 값을 사용할 수도 있습니다: 파일-파일, html- html 요소, 이미지 -그림.
이 방법을 사용하면 드래그된 데이터 유형을 선택적으로 처리할 수 있습니다.
속성 멤버:

코드 복사
코드는 다음과 같습니다.

effectAllowed: 데이터 소스 요소의 데이터로 수행할 수 있는 작업을 설정하거나 가져옵니다.

속성 유형은 문자열이며, 값 범위는
"복사"-데이터 복사
"링크"-링크
"이동"-입니다. 데이터 이동
"copyLink"-대상 개체에 따라 결정되는 데이터를 복사하거나 연결합니다.
"copyMove"-대상 개체에 따라 결정되는 데이터를 복사하거나 이동합니다.
"linkMove" - ​​​​대상 개체에 따라 데이터를 연결하거나 이동합니다.
"all" - 모든 작업이 지원됩니다.
"없음"-드래그를 비활성화합니다.
"초기화되지 않음" - 기본값, 기본 동작을 채택합니다.
effectAllowed를 없음으로 설정한 후에는 드래그가 금지되지만 마우스 모양은 여전히 ​​드래그 가능한 개체의 모양을 표시합니다. 이 마우스 모양을 표시하지 않으려면 창 이벤트 이벤트의 returnValue 속성을 설정해야 합니다. 거짓으로.

코드 복사
코드는 다음과 같습니다.

dropEffect: 설정 또는 가져오기 드래그 대상 및 관련 마우스 모양에 허용되는 작업입니다.

속성 종류는 문자열이며, 값의 범위는 다음과 같습니다:
"복사" - 복사할 때 마우스가 모양으로 표시됩니다.
"링크" - 마우스가 나타납니다. 연결된 모양으로 표시됩니다.
"move" - ​​마우스가 움직이는 모양으로 나타납니다.
"none"(기본값) - 마우스가 드래그하지 않고 모양으로 나타납니다.
effectAllowed는 데이터 소스에서 지원하는 작업을 지정하므로 일반적으로 ondragstart 이벤트에 지정됩니다. dropEffect는 드래그 앤 드롭 대상에서 지원되는 작업을 지정하므로 effectAllowed와 함께 일반적으로 드래그 대상의 ondragenter, ondragover 및 ondrop 이벤트에 사용됩니다.

코드 복사
코드는 다음과 같습니다.

파일 목록을 반환합니다. 파일을 FileList로 드래그했습니다.
유형: ondragstart에서 전송된 데이터(드래그된 데이터) 유형 목록입니다.

dataTransfer 객체가 존재하면 드래그된 데이터 소스와 대상 요소 간에 논리적 데이터 전송이 가능해집니다. 일반적으로 setData 메소드를 사용하여 데이터 소스 요소의 ondragstart 이벤트에 데이터를 제공한 다음 getData 메소드를 사용하여 대상 요소의 데이터를 가져옵니다.
드래그 중에 발생하는 이벤트
다음은 드래그 중에 발생하는 이벤트입니다. 기본적으로 이벤트가 발생하는 순서는 다음과 같습니다.

코드 복사
코드는 다음과 같습니다.

dragstart: 드래그할 요소가 드래그되기 시작할 때 발생하는 이벤트입니다. 개체는 드래그 앤 드롭 요소입니다.
드래그: 요소가 드래그될 때 트리거됩니다. 이 이벤트 개체는 드래그된 요소입니다.
dragenter: 드래그 요소가 대상 요소에 들어갈 때 트리거됩니다. 이 이벤트 개체는 대상 요소입니다.
dragover: 대상 요소에서 요소를 드래그하여 이동할 때 트리거됩니다. 이 이벤트 객체는 대상 요소입니다.
dragleave: 요소가 대상 요소에서 멀리 드래그될 때 트리거됩니다. 이 이벤트 개체는 대상 요소입니다.
drop: 드래그된 요소가 대상 요소 내에 배치될 때 트리거됩니다. 이 이벤트 개체는 대상 요소입니다.
dragend: 드롭 후 트리거됩니다. 즉, 드래그가 완료되면 트리거됩니다. 이 이벤트 객체는 드래그된 요소입니다.

기본적으로 이벤트의 이벤트 매개변수는 관련 요소에 전달되며 쉽게 수정할 수 있습니다. 여기서는 모든 이벤트를 처리할 필요가 없으며 일반적으로 메인 이벤트만 연결하면 됩니다.
드래그 시작-드래그 시작 이벤트
이 이벤트에서 전달된 매개변수에는 드래그된 요소(event.Target)를 쉽게 얻을 수 있는 매우 풍부한 정보가 포함되어 있습니다. (event.dataTransfer.setData); 드래그 뒤에 있는 논리를 쉽게 구현할 수 있습니다(물론 바인딩할 때 다른 매개변수를 전달할 수도 있습니다).
드래그 프로세스 중 - ondrag, ondragover, ondragenter 및 ondragleave 이벤트
ondrag 이벤트의 개체는 드래그된 요소이며 일반적으로 이 이벤트는 덜 자주 처리됩니다. ondragenter 이벤트는 드래그가 현재 요소에 들어갈 때 발생하고, ondragleave 이벤트는 드래그가 현재 요소를 떠날 때 발생하며, ondragover 이벤트는 드래그가 현재 요소 내에서 이동할 때 발생합니다.
여기서 한 가지만 주의하면 됩니다. 기본적으로 브라우저는 요소 삭제를 금지하므로 요소 삭제를 허용하려면 이 함수에서 false를 반환하거나 event.preventDefault를 호출해야 합니다. () 방법. 아래 예와 같습니다.
Drag end-ondrop, ondragend 이벤트
드래그 가능한 데이터를 드롭하면 드롭 이벤트가 발생합니다. 드롭이 완료된 후 dragend 이벤트가 발생하는데, 이 이벤트는 비교적 거의 사용되지 않습니다.
간단한 예를 보세요:

코드 복사
코드는 다음과 같습니다.



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()}




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

파일 드래그
위의 예에서는 dataTransfer의 다양한 방법과 속성을 사용했습니다. 인터넷의 또 다른 흥미로운 애플리케이션을 살펴보겠습니다. 이미지를 웹 페이지에 드래그 앤 드롭한 다음 표시합니다. 웹 페이지. 이 애플리케이션은 dataTransfer의 파일 속성을 사용합니다.

코드 복사
코드는 다음과 같습니다.

🎜>< ;html>


HTML5 드래그 앤 드롭 파일<br><style> <br> #section{font-family:"조지아","Microsoft Yahei","中文中宋";} <br>.container{display:inline-block;min-height:200px;min-width:360px; 색상: #f30;패딩:30px;테두리:3pxsolid#ddd;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;} <br>.preview{최대 너비: 360px; } <br>#files-list{position:absolute;top:0;left:500px;} <br>#list{width:460px;} <br>#list.preview{max-width:250px;} <br>#listp{color:#888;font-size:12px;} <br>#list.green{color:#09c;} <br></style> <br></head> >< ;body> <br><divid="section"> <br><p>이미지를 아래 컨테이너로 드래그하세요. </p> <br><divid="container" class= " 컨테이너"> <br></div> <br><divid="files-list"> <br><p>드래그된 파일: </p> <br>< ; ulid="list"></ul> <br></div> <br><script>if(window.FileReader){ <br> = document.getElementById('list'), <br>cnt=document.getElementById('container'); <br>//이미지인지 확인 <br>functionisImage(type){ <br>switch(type) { <br> 케이스'이미지/jpeg': <br>케이스'이미지/png': <br>케이스'이미지/gif': <br>케이스'이미지/bmp': <br>케이스'이미지/jpg' : <br> returntrue; <br>default: <br>returnfalse; <br>} <br>} <br>//드래그 앤 드롭 파일 목록 처리<br>functionhandleFileSelect(evt){ <br>evt.stopPropagation (); <br> evt.preventDefault(); <br>varfiles=evt.dataTransfer.files <br>for(vari=0,f;f=files[i];i ){ <br>vart=f .type?f.type :'n/a', <br>reader=newFileReader(), <br>looks=function(f,img){ <br>list.innerHTML ='<li><strong> ' f.name '&lt ;/strong>(' t <br>')-' f.size 'bytes<p>' '</p></li>' <br>cnt.innerHTML= img <br>} , <br>isImg=isImage(t), <br>img <br>//처리된 이미지 <br>if(isImg){ <br>reader.onload=(function(theFile) { <br>반환 함수(e){ <br>img='<imgclass="preview"src="' e.target.result '"title="' theFile.name '"/>' <br> Looks(theFile,img ); <br>}; <br>})(f) <br>reader.readAsDataURL(f) <br>}else{ <br>img='"o((>Ω< ))o", 보내주신 내용은 사진이 아닙니다! ! '; <br />looks(f,img); <br />} <br />} <br />} <br />//삽입 및 드래그 효과 처리<br />functionhandleDragEnter(evt){this.setAttribute('style' , 'border-style:dashed;');} <br />functionhandleDragLeave(evt){this.setAttribute('style','');} <br />//브라우저 기본 이벤트가 <br />functionhandleDragOver(evt){ <br />evt.stopPropagation(); <br />evt.preventDefault() <br />} <br />cnt.addEventListener('dragenter',handleDragEnter,false); 🎜>cnt.addEventListener('dragover',handleDragOver,false); <br />cnt.addEventListener('drop',handleFileSelect,false) <br />cnt.addEventListener('dragleave',handleDragLeave,false); }else{ <br />document.getElementById('section').innerHTML='학생 여러분의 브라우저는 그것을 지원하지 않습니다.' <br />} <br /></script> <br></body> ></html> <br><br><br>이 예제에서는 html5의 파일 읽기 API를 사용합니다. FileReader 개체는 파일 읽기를 위한 다음과 같은 비동기 메서드를 제공합니다. <br>1. <br>바이너리 모드에서 파일을 읽으면 결과 속성에 파일의 바이너리 형식이 포함됩니다.<br>2.FileReader.readAsText(fileBlob,opt_encoding) <br>텍스트 모드에서 파일을 읽으면 결과 속성에 다음이 포함됩니다. 파일의 텍스트 형식이며 기본 디코딩 매개변수는 "utf-8"입니다. <br>3.FileReader.readAsDataURL(file) </div>URL 형식의 파일을 읽은 결과에는 파일의 DataURL 형식이 포함됩니다(그림은 일반적으로 이런 방식으로 사용됩니다). <br>위 방법으로 파일을 읽으면 다음 이벤트가 발생합니다. <br><br><br><br><br><br>코드 복사 <br><br><br> 코드는 다음과 같습니다: <div class="msgheader"><div class="right"> <span style="CURSOR: pointer" onclick="copycode(getid('phpcode171'));">onloadstart, onprogress, onabort, onerror, onload, onloadend <u></u><br>이 이벤트는 매우 간단합니다. 필요할 때 연결하기만 하면 됩니다. 아래 코드 예시를 보세요. <br><br><div class="msgheader"> <div class="right"><span style="CURSOR: pointer" onclick="copycode(getid('phpcode172'));"><u> 코드를 복사하세요. </u></span></div>코드는 다음과 같습니다. </div> <div class="msgborder" id="phpcode172"> <br>functionstartRead() { <br>//obtaininputelementthroughDOM <br>varfile=document.getElementById('file').files[0]; <br>if(file){ <br>getAsText(file) <br> } <br>} <br>functiongetAsText(readFile){ <br>varreader=newFileReader(); <br>//ReadfileintomemoryasUTF-16 <br>reader.readAsText(readFile,"UTF-16")/ /Handleprogress,success, anderrors <br>reader.onprogress=updateProgress; <br>reader.onload=loaded; <br>reader.onerror=errorHandler; <br>} <br>functionupdateProgress(evt){ <br>if( evt.lengthComputable){ <br>//evt.loadedandevt.totalareProgressEventproperties <br>varloaded=(evt.loaded/evt.total); <br>if(loaded<1){ <br>//Increasetheprogbarlength <br>/ /style.width= (loaded*200) "px"; <br>} <br>} <br>} <br>functionloaded(evt){ <br>//Obtainthereadfiledata <br>varfileString=evt.target.result ; <br>/ /HandleUTF-16filedump <br>if(utils.regexp.is중국어(fileString)){ <br>//중국어 문자 이름 유효성 검사 <br>} <br>else{ <br>//runothercharsettest <br>} <br>// xhr.send(fileString) <br>} <br>functionerrorHandler(evt){ <br>if(evt.target.error.name=="NotReadableErr"){ <br>//파일을 읽을 수 없음 <br>} <br> } <br><br> </div>간략한 설명: 일반 파일 다운로드에서는 window.open 메서드를 사용합니다. 예: <br><br><br><div class="msgheader"><div class="right"> <span style="CURSOR: pointer" onclick="copycode(getid('phpcode173'));">코드 복사 <u></u></span>코드는 다음과 같습니다.</div></div> <div class="msgborder" id="phpcode173">window.open('http://aaa.bbbb.com/ccc.rar','_blank' ) <br><br> </div> <br><strong>실용 참고 자료: <font color="#0000ff"><br></font>공식 문서: </strong>http://www.w3schools.com/html5/<a href="http://www.w3schools.com/html5/"></a>좋은 튜토리얼 웹사이트: http://html5.phphubei.com/html5/features/DrapAndDrop/<br>MSDN 도움말: <br>http://msdn.microsoft.com/en-us/library/ms535861( v=vs.85 ).aspx<a href="http://msdn.microsoft.com/en-us/library/ms535861(v=vs.85).aspx"></a>파일 드래그 앤 드롭 세부정보:<br>http://www.html5rocks.com/zh/tutorials/file/dndfiles/<a href="http://www.html5rocks.com/zh/tutorials/file/dndfiles/"></a>파일 드래그 앤 드롭 드롭 및 업로드:<br>http://www.chinaz.com/design/2010/0909/131984.shtml<a href="http://www.chinaz.com/design/2010/0909/131984.shtml"></a>파일 드래그 앤 드롭 업로드의 전체 예:<br>http://www. cnblogs.com/liaofeng/archive/ 2011/05/18/2049928.html<a href="http://www.cnblogs.com/liaofeng/archive/2011/05/18/2049928.html"></a>파일 다운로드 예:<br>http://hi.baidu.com/guo_biru/item/2d7201c012b6debd0c0a7b05<a href="http://hi.baidu.com/guo_biru/item/2d7201c012b6debd0c0a7b05"></a>window.open 전략:<br>http://www.cnblogs.com/liulf/archive/2010/03/01/1675511.html<a href="http://www.cnblogs.com/liulf/archive/2010/03/01/1675511.html"></a>window.open 매개변수: <br>http:/ /www.koyoz.com/blog /?action=show&id=176<a href="http://www.koyoz.com/blog/?action=show&id=176"></a></span> </div></div> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>성명:</span><div>본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.</div></div></div><div class="nphpSytBox"><span>이전 기사:<a class="dBlack" title="HTML5 SVG 2D 소개 7 - SVG Elements_html5 튜토리얼 기술의 재사용 및 참조" href="http://m.php.cn/ko/faq/6413.html">HTML5 SVG 2D 소개 7 - SVG Elements_html5 튜토리얼 기술의 재사용 및 참조</a></span><span>다음 기사:<a class="dBlack" title="HTML5 SVG 2D 소개 7 - SVG Elements_html5 튜토리얼 기술의 재사용 및 참조" href="http://m.php.cn/ko/faq/6415.html">HTML5 SVG 2D 소개 7 - SVG Elements_html5 튜토리얼 기술의 재사용 및 참조</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>관련 기사</h2><em><a href="http://m.php.cn/ko/article.html" class="bBlack"><i>더보기</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ko/faq/348281.html" title="AlloyTouch 전체 화면 스크롤 플러그인으로 30초 만에 부드러운 H5 페이지 생성" class="aBlack">AlloyTouch 전체 화면 스크롤 플러그인으로 30초 만에 부드러운 H5 페이지 생성</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ko/faq/348372.html" title="HTML5 실제 전투 및 터치 이벤트 분석(touchstart, touchmove 및 touchend)" class="aBlack">HTML5 실제 전투 및 터치 이벤트 분석(touchstart, touchmove 및 touchend)</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ko/faq/348373.html" title="HTML5 Canvas 9의 이미지 그리기 예제에 대한 자세한 설명" class="aBlack">HTML5 Canvas 9의 이미지 그리기 예제에 대한 자세한 설명</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ko/faq/348374.html" title="정규 표현식과 새로운 HTML5 요소" class="aBlack">정규 표현식과 새로운 HTML5 요소</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ko/faq/348469.html" title="NodeJS와 HTML5를 결합하여 여러 파일을 끌어서 놓아 서버에 업로드하는 방법" class="aBlack">NodeJS와 HTML5를 결합하여 여러 파일을 끌어서 놓아 서버에 업로드하는 방법</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!</p></div><div class="footermid"><a href="http://m.php.cn/ko/about/us.html">회사 소개</a><a href="http://m.php.cn/ko/about/disclaimer.html">부인 성명</a><a href="http://m.php.cn/ko/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>