이 글의 내용은 html5에서 html 요소의 드래그 앤 드롭 기능을 구현하는 방법에 관한 것입니다. html5 이전에는 드래그 앤 드롭을 구현하려면 js를 사용해야 했지만, 이제 html5에서는 내부적으로 드래그 앤 드롭 기능을 지원하지만, 조금 더 복잡한 기능을 구현하려면 여전히 js의 도움이 필요합니다. 아래에서 몇 가지 예를 살펴보겠습니다.
1. 드래그 객체를 생성합니다
draggable 속성을 통해 드래그 기능을 구현해야 하는 요소를 브라우저에 알릴 수 있습니다. draggable에는 세 가지 값이 있습니다. true: 요소를 끌 수 있습니다. false: 요소를 끌 수 없습니다. auto: 요소를 끌 수 있는지 여부를 브라우저가 결정합니다.
시스템 기본값은 자동이지만 자동의 경우 브라우저마다 요소별로 드래그 앤 드롭 기능을 다르게 지원합니다. 예를 들어 img 개체는 지원되지만 div 개체는 지원되지 않습니다. 따라서 요소를 드래그해야 하는 경우 draggale을 true로 설정하는 것이 가장 좋습니다. 아래 예시를 살펴보겠습니다.
🎜>{
float: 왼쪽;
}
#target, #src > img
{
테두리: 얇은 단색 검정
여백: 4px;
}
#target
{
높이: 123px;
너비: 220px;
디스플레이: 테이블; 🎜>#target > ; p
{
display: table-cell
vertical-align: middle
}
#target > img
{
margin: 1px;
}
<script> <br />var src = document.getElementById("src"); <br />var target = document.getElementById("target") <br /></script>
/html>
작동 효과:
2. 드래그 이벤트 처리
드래그 관련 이벤트에는 두 가지 유형이 있는데, 하나는 드래그 객체의 이벤트입니다. 드롭 지역 이벤트. 드래그 이벤트에는 다음이 포함됩니다. dragstart: 요소 드래그가 시작될 때 트리거됩니다. drag: 요소 드래그 프로세스 중에 트리거됩니다. dragend: 요소 드래그가 끝날 때 트리거됩니다. 아래 예시를 살펴보겠습니다.
코드 복사
코드는 다음과 같습니다. 테두리: 얇은 단색 검정
여백: 4px;
}
#target
{
높이: 123px;
폭: 220px;
디스플레이: 테이블; 🎜>#target > p
{
display: table-cell
vertical-align: middle
}
#target > img
{
margin: 1px;
}
img.draged
{
배경색: 주황색
}
본문>
>
<script> <br />var src = document.getElementById("src"); ); <br />var msg = document.getElementById("msg"); <br />src.ondragstart = function (e) { <br />e.target.classList.add("dragged") <br />} 🎜>src.ondragend = function (e) { <br />e.target.classList.remove("dragged"); <br />msg.innerHTML = "여기에 놓기" <br />} <br />src.ondrag = 함수 (e) { <br />msg.innerHTML = e.target.id <br />} <br /></script>
🎜>
운영효과:
3. 드롭 영역 생성 드롭 영역과 관련된 이벤트를 살펴보겠습니다. dragenter: 드래그 개체가 드롭 영역에 들어갈 때 트리거됩니다. dragover: 드래그 개체가 이동할 때 트리거됩니다. dragleave: 드래그 객체가 드롭 영역에 배치되지 않고 드롭 영역을 벗어날 때 트리거됩니다. drop: 드래그 객체가 드롭 영역에 배치될 때 트리거됩니다.
예제를 살펴보겠습니다.
*
{
float: 왼쪽;
}
#target, #src >
{
테두리: 얇은 단색
패딩: 2px; 여백: 4px
}
#target
{
높이: 123px;
너비: 220px;
디스플레이: 테이블; }
#target > p
{
display: table-cell
vertical-align: middle
}
#target >
{
여백: 1px;
}
img.draged
{
배경색: lightgrey
}
< ;img draggable="true" id="html5 가이드-3.html elements_html5 튜토리얼 스킬의 드래그 앤 드롭 기능 구현 방법" src="img/2.jpg" alt="html5 가이드-3.html elements_html5 튜토리얼 스킬의 드래그 앤 드롭 기능 구현 방법" />
<script> <br />var src = document.getElementById("src"); target"); <br />var msg = document.getElementById("msg"); <br />var draggedID; <br />target.ondragenter = handlerDrag; <br />target.ondragover = handlerDrag; <br />함수 handlerDrag(e ) { <br />e.preventDefault(); <br />} <br />target.ondrop = function (e) { <br />var newElem = document.getElementById(draaggedID).cloneNode(false); innerHTML = "" ; <br />target.appendChild(newElem); <br />e.preventDefault(); <br />} <br />src.ondragstart = function (e) { <br />draggedID = e.target.id ; <br /> e.target.classList.add("dragged"); <br />} <br />src.ondragend = function (e) { <br />var elems = document.querySelectorAll(".dragged"); 🎜>for ( var i = 0; i < elems.length; i ) { <br />elems[i].classList.remove("dragged"); <br />} <br />} <br /></ 스크립트> <br /> <br /> <br /><br /><br />실행 결과: <br />
<br /><br /><br />
<br /><br /><br />
<br /><br />4. DataTransfer 사용<br /> </script>
Drag 개체에서 드롭 영역으로 데이터를 전송하는 데 DataTransfer를 사용합니다. DataTransfer에는 다음과 같은 속성과 메서드가 있습니다. 유형: 데이터 형식을 반환합니다. getData(
): 지정된 형식으로 데이터를 반환합니다. setData(, ): 데이터를 설정합니다. 지정된 형식clearData(): 지정된 형식의 데이터를 제거합니다. 파일: 전달된 파일의 배열을 반환합니다.
예제 3과 동일한 효과를 얻는 다음 예제를 살펴보겠습니다.
코드 복사
코드는 다음과 같습니다. 예제목>
#src > *
{
플로트: 왼쪽;
}
#src > img
{
테두리: 얇은 단색 검정색;
패딩: 2px;
여백: 4px;
}
#target
{
테두리: 얇고 단색 검정색;
여백: 4px;
}
#target
{
높이: 123px;
너비: 220px;
텍스트 정렬: 가운데;
디스플레이: 테이블;
}
#타겟 > p
{
디스플레이: 테이블-셀;
세로 정렬: 가운데;
}
img.draged
{
배경색: 주황색;
}
var src = document.getElementById("src");
var target = document.getElementById("target");
target.ondragenter = handlerDrag;
target.ondragover = handlerDrag;
function handlerDrag(e) {
e.preventDefault();
}
target.ondrop = function (e) {
vardropID = e.dataTransfer.getData("Text");
var newElem = document.getElementById(droppedID).cloneNode(false);
target.innerHTML = "";
target.appendChild(newElem);
e.preventDefault();
}
src.ondragstart = function (e) {
e.dataTransfer.setData("Text", e.target.id);
e.target.classList.add("dragged");
}
src.ondragend = function (e) {
var elems = document.querySelectorAll(".dragged");
for (var i = 0; i elems[i].classList.remove("dragged");
}
}