HTML 드래그 앤 드롭인터페이스를 통해 응용 프로그램은 브라우저에서 끌어서 놓기 기능을 사용할 수 있습니다.사용자가 선택할 수 있습니다 드래그 가능요소를 마우스로 드래그하여 떨어뜨릴 수 있는요소를 클릭하고 마우스 버튼을 놓아 드롭합니다. 반투명 표현 드래그 가능요소는 끌기 작업 중에 포인터를 따릅니다.

웹 사이트, 확장 및 XUL 응용 프로그램의 경우 어떤 요소가 될 수 있는지 사용자 지정할 수 있습니다. 드래그 가능, 피드백 유형 드래그 가능요소가 생성하고 떨어뜨릴 수 있는집단.

HTML 끌어서 놓기에 대한 이 개요에는 인터페이스에 대한 설명, 응용 프로그램에 끌어서 놓기 지원을 추가하는 기본 단계 및 인터페이스의 상호 운용성 요약이 포함됩니다.

드래그 이벤트

이벤트 이벤트 핸들러에서 다음과 같은 경우에 발생합니다.
견인 온드래그 …ㅏ 드래그된 항목(요소 또는 텍스트 선택)이 드래그됩니다.
드래젠드 온드라젠드 ... 끌기 작업이 종료됩니다(예: 마우스 단추를 놓기 또는 Esc 키 누르기, 끌기 완료 참조).
드래젠터 온드라젠터 … 드래그한 항목이 유효한 놓기 대상으로 들어갑니다. ( 놓기 대상 지정 을 참조하십시오.)
드래그 엑시트 온드라그엑시트 … 요소는 더 이상 끌기 작업의 즉각적인 선택 대상이 아닙니다.
드래그리브 온드라이브 … 드래그한 항목이 유효한 놓기 대상을 남깁니다.
드래그오버 온드래거 ...끌어놓은 항목이 수백 밀리초마다 유효한 놓기 대상 위로 드래그됩니다.
드래그스타트 ondragstart ...사용자가 항목을 끌기 시작합니다. ( 끌기 작업 시작 을 참조하십시오.)
하락 하락 … 아이템이 유효한 놓기 대상에 떨어졌습니다. (드롭 수행을 참조하십시오.)

메모: OS에서 브라우저로 파일을 드래그할 때 dragstart 및 dragend 이벤트가 발생하지 않습니다.

인터페이스

기본

이 섹션은 끌어서 놓기 기능을 응용 프로그램에 추가하는 기본 단계에 대한 요약입니다.

무엇인지 식별 드래그 가능

요소 만들기 드래그 가능다음 코드 샘플과 같이 draggable 속성과 ondragstart 전역 이벤트 핸들러를 추가해야 합니다.

이 요소는 드래그할 수 있습니다.

자세한 내용은 다음을 참조하세요.

드롭을 처리 효과

drop 이벤트에 대한 핸들러는 애플리케이션별 방식으로 드래그 데이터를 자유롭게 처리할 수 있습니다.

일반적으로 응용 프로그램은 getData() 메서드를 사용하여 드래그 항목을 검색한 다음 그에 따라 처리합니다. 또한 응용 프로그램 의미는 값에 따라 다를 수 있습니다.

드래그 앤 드롭 기능은 iPad의 성능을 향상시키는 데 도움이 될 수 있습니다. 사용 방법은 다음과 같습니다.

따라서 한 클라우드 스토리지 서비스에서 다른 클라우드 스토리지 서비스로 파일을 이동하거나 Safari에서 텍스트 편집 앱으로 텍스트를 복사하여 인용문을 추가하거나 특정 사진을 파일 스토리지 앱에 백업할 수 있습니다.

사진, 파일 및 텍스트를 끌어다 놓는 방법

1. 다른 앱으로 드래그하려는 사진, 파일 또는 강조 표시된 텍스트를 길게 터치합니다.

2. 항목을 이 응용 프로그램의 원하는 위치 또는 Slide Over 또는 Split View에서 연 다른 위치로 끌어서 놓습니다.

한 번에 여러 사진 또는 파일을 끌어다 놓는 방법

1. 드래그하려는 사진이나 파일 중 하나를 길게 터치합니다.

2. 현재 항목을 드래그하는 동안 드래그하려는 다른 사진이나 파일을 탭합니다. 이동하고 싶은 만큼의 요소로 다시 수행하십시오.

3. 선택한 모든 개체를 Slide Over 또는 Split View에서 연 다른 응용 프로그램의 지정된 위치로 끌어서 놓습니다.

한 응용 프로그램에서 다른 응용 프로그램으로 텍스트를 드래그하는 방법

1. 드래그하여 선택하려는 텍스트 부분을 길게 누릅니다.

2. 선택 지점을 사용하여 드래그하려는 나머지 텍스트를 강조 표시합니다.

3. 선택한 텍스트를 길게 누릅니다.

4. 텍스트를 배치하려는 응용 프로그램으로 끌어서 놓습니다.

"드래그 앤 드롭"을 사용하여 한 번에 여러 응용 프로그램의 아이콘 위치를 변경하는 방법

대부분의 iOS 드래그 앤 드롭 기능은 iPad에서만 작동하지만 이 트릭은 실제로 iPhone과 iPad 모두에서 작동합니다. 이를 통해 홈 화면에서 다음을 사용하여 애플리케이션의 위치를 ​​구성할 수 있습니다. « 드래그 앤 드롭'을 사용하여 하나씩 이동하지 않습니다.

1. 홈 화면에서 위치를 변경하려는 앱의 아이콘을 길게 터치합니다.

2. 이동하려는 추가 앱을 탭합니다.

3. 이러한 앱을 원하는 페이지나 폴더로 끌어다 놓습니다.

182

이 예에서는 div 요소를 선택하고 호출하여 이동 가능하게 만듭니다. draggable() 메서드. 아래 그림과 같이 열린 문서에서 요소는 일반적인 위치를 차지하지만 그 이후에는 브라우저 창의 아무 곳이나 마우스 포인터로 이동할 수 있습니다.

끌어서 놓기 기능은 그 자체로 유용하지만 다음에 설명하는 Droppable 상호 작용과 함께 사용하면 훨씬 더 유용합니다.

드래그 가능한 상호 작용은 특정 HTML 마크업 및 CSS 스타일을 통해서만 구현됩니다. 즉, 이 기능은 거의 모든 브라우저에서 작동하지만 이 기능이 부여된 요소는 운영 체제의 유사한 기본 끌어서 놓기 기능으로 작동할 수 없습니다.

HTML5 사양에 정의된 끌어서 놓기 작업은 일반적으로 기본 운영 체제 메커니즘을 사용하여 구현됩니다. jQuery UI 끌어서 놓기 메커니즘을 사용하는 경우 충돌을 피하기 위해 HTML5에 해당하는 기능을 비활성화하는 것이 가장 좋습니다. 이렇게 하려면 문서 본문 요소의 draggable 속성을 false로 설정합니다.

드래그 가능한 상호 작용 사용자 정의

Draggable 상호 작용에 대한 많은 사용자 지정 옵션이 있습니다. 다음 섹션에서 다루는 가장 중요한 속성은 아래 표에 요약되어 있습니다.

드래그 가능한 상호 작용 속성
재산 설명
중심선 특정 방향으로의 이동을 제한합니다. 기본값은 제한이 없음을 의미하는 false이지만 "x"(x축을 따라만 이동) 또는 "y"(y축을 따라만 이동) 값을 지정할 수도 있습니다.
방지 플로팅 요소의 위치를 ​​화면의 특정 영역으로 제한합니다. 지원되는 값 유형은 해당 예제와 함께 아래 표에 설명되어 있습니다. 기본값은 false이며 제한이 없음을 의미합니다.
지연 요소가 이동하기 전에 끌어야 하는 시간을 지정합니다. 기본값은 지연이 없음을 의미하는 0입니다.
거리 요소가 실제로 이동하기 전에 시작 위치에서 요소를 끌어야 하는 거리를 지정합니다. 기본값은 1픽셀입니다.
그리드 이동된 요소를 그리드 셀에 강제로 바인딩합니다. 기본값은 바인딩이 없음을 의미하는 false입니다.

이동 방향 제한

요소의 이동을 특정 방향으로 제한할 수 있는 몇 가지 방법이 있습니다. 첫 번째는 X 또는 Y 축으로 이동 방향을 제한할 수 있는 축 옵션을 사용하는 것입니다. 예는 다음과 같습니다.

...

세로로 드래그
수평으로 드래그
예제 실행

이 예제에서는 두 개의 div 요소를 정의하고 jQuery로 선택하고 draggable() 메서드를 호출합니다. 이 메서드는 처음에 두 div가 x 방향으로 이동하도록 제한하는 객체를 전달합니다. 그런 다음 jQuery filter() 메서드를 적용하면 jQuery가 전체 문서를 다시 검색하지 않고 dragV 요소를 선택하고 허용된 다른 이동으로 설정할 수 있습니다. 방향 - Y축을 따라 따라서 하나의 div 요소는 세로 방향으로만 드래그할 수 있고 다른 하나는 가로 방향으로만 드래그할 수 있는 문서를 얻습니다. 결과는 그림에 나와 있습니다.

요소 이동 허용 영역 제한

요소를 드래그할 수 있는 화면 영역을 제한할 수도 있습니다. 이를 위해 포함 옵션이 사용됩니다. 이 옵션에서 지정할 수 있는 값 형식은 아래 표에 설명되어 있습니다.

포함 옵션을 사용하는 예는 다음과 같습니다.

...

수평으로 드래그
부모 내부로 드래그
예제 실행

이 예에서 두 요소는 고정 크기 div 요소인 상위 요소 내에서만 드래그할 수 있도록 이동하도록 제한됩니다. 부동 div 중 하나에는 축 옵션을 사용하여 상위 요소 내에서만 수평으로 이동할 수 있다는 추가 제약 조건이 있습니다. 결과는 그림에 나와 있습니다.

요소를 그리드 셀로 이동하는 기능 제한

그리드 옵션을 사용하면 이동된 요소를 그리드 셀에 바인딩할 수 있습니다. 이 옵션은 격자 셀의 너비와 높이를 픽셀 단위로 지정하는 두 요소의 배열을 허용합니다. 그리드 옵션을 사용하는 예는 다음과 같습니다.

...

나를 끌어
예제 실행

이 예에서 격자는 너비 100픽셀, 높이 50픽셀로 설정됩니다. 요소를 끌면 한(보이지 않는) 셀에서 다른 셀로 "점프"됩니다. 스냅 효과는 상호 작용 기능의 훌륭한 사용 사례이지만 스크린샷으로 전달하기 어렵습니다.

자유 모션 축을 1로 설정하여 한 방향에 대해서만 스냅 효과를 만들 수 있습니다. 예를 들어 그리드 옵션을 로 설정하면 요소가 수평으로 이동할 때 100px 너비의 그리드 셀에 스냅되지만 수직으로 자유롭게 이동합니다. .

여행 지연

부동 요소의 끌기를 지연시킬 수 있는 두 가지 옵션이 있습니다. 지연 옵션을 사용하면 요소가 실제로 이동되기 전에 사용자가 마우스 포인터를 끌어야 하는 시간을 밀리초 단위로 설정할 수 있습니다. 다른 종류의 지연은 요소가 따라오기 전에 사용자가 마우스 포인터를 드래그해야 하는 거리를 픽셀 단위로 지정하는 거리 옵션에 의해 제공됩니다.

두 설정을 모두 사용하는 예는 다음과 같습니다.

...

시간 지연으로 차단
최소 거리로 차단
예제 실행

이 예에는 두 개의 부동 요소가 있는데, 그 중 하나는 지연 옵션으로 설정된 지연이 있고 다른 하나는 거리 옵션이 있습니다.

지연 옵션으로 지정된 지연의 경우 사용자는 실제로 요소를 이동하기 전에 지정된 시간 동안 드래그해야 합니다. 이 예에서 이 간격의 지속 시간은 1000ms입니다. 이 시간 동안 마우스를 움직일 필요는 없지만 전체 지연 시간 동안 마우스 버튼을 누른 상태를 유지해야 하며 이후에는 마우스를 움직여 요소를 이동할 수 있습니다. 지연 시간이 경과한 후 이전에 설명한 그리드, 영역 및 축 옵션에 의해 부과된 제약 조건에 따라 이동 중인 요소가 마우스 포인터의 위치에 맞춰집니다.

거리 옵션도 비슷한 효과가 있지만 이 경우 사용자는 요소의 시작 위치에서 임의의 방향으로 최소한 지정된 픽셀 수만큼 마우스 포인터를 끌어야 합니다. 이동 중인 항목은 현재 포인터 위치로 이동합니다.

동일한 요소에 두 설정을 모두 적용하면 이동 중인 요소는 두 지연 기준이 충족될 때까지 이동하지 않습니다. 요소를 드래그하려는 시도가 지정된 시간 동안 지속되고 마우스 포인터가 지정된 픽셀 수를 이동할 때까지.

드래그 가능한 상호 작용 방법 사용

Draggable 상호 작용에 대해 정의된 모든 메서드는 위젯에서 이미 본 기본 메서드 집합의 일부입니다. Draggable 상호 작용과 관련된 메서드는 제공되지 않으므로 자세히 다루지 않습니다. 사용 가능한 방법 목록은 아래 표에 나와 있습니다.

드래그 가능한 상호 작용 이벤트 사용

드래그 가능한 상호 작용은 요소가 드래그될 때 알리는 간단한 이벤트 집합을 지원합니다. 이러한 이벤트는 아래 표에 설명되어 있습니다.

위젯 이벤트와 마찬가지로 이러한 이벤트도 반응할 수 있습니다. 시작 및 중지 이벤트를 처리하는 예는 다음과 같습니다.

...

나를 끌어
예제 실행

이 예제에서는 시작 및 중지 이벤트를 사용하여 끌기 프로세스 중에 요소의 텍스트 내용을 변경합니다. 이 이점은 Draggable 상호 작용이 HTML과 CSS를 사용하여 완전히 구현된다는 사실에서 비롯됩니다. jQuery를 사용하여 화면을 가로질러 이동하는 동안에도 부동 요소의 상태를 변경할 수 있습니다.

Droppable 상호 작용 사용

어떤 상황에서는 요소를 드래그하는 것만으로도 충분할 수 있지만 Droppable 상호 작용과 함께 사용할 때 가장 유용합니다.

Droppable 상호 작용이 적용된 요소(요소 수락)는 Draggable 상호 작용으로 생성된 droppable 요소를 수락하는 기능을 얻습니다.

수신 요소는 다음으로 생성됩니다. droppable() 메서드, 하지만 유용한 기능을 얻으려면 이러한 종류의 상호 작용에 대해 정의된 것 중에서 이벤트 핸들러를 만들어야 합니다. 사용 가능한 이벤트는 아래 표에 나와 있습니다.

드롭 가능한 상호 작용 이벤트
이벤트 설명
만들다 Droppable 상호 작용이 요소에 적용될 때 발생합니다.
활성화 사용자가 부동 요소를 끌기 시작할 때 발생합니다.
비활성화 사용자가 부동 요소 드래그를 중지할 때 발생합니다.
~ 위에 사용자가 수신 요소 위로 부동 요소를 끌 때 발생합니다(그러나 마우스 버튼이 아직 해제되지 않았다고 가정).
밖으로 사용자가 수신 요소 외부로 부동 요소를 끌 때 발생합니다.
하락 사용자가 수신 요소에서 부동 요소를 떠날 때 발생합니다.

단일 drop 이벤트 핸들러가 있는 간단한 수신 요소를 만드는 예는 다음과 같습니다.

...

여기를 떠나
나를 끌어
예제 실행

이 예에서 div 요소가 문서에 추가되고 그 텍스트 내용은 "여기에 남겨주세요"라는 문자열로 표시됩니다. jQuery를 사용하여 이 요소를 선택하고 droppable() 메서드를 호출하여 drop 이벤트에 대한 핸들러를 정의하는 설정 개체를 전달합니다. 이 이벤트에 대한 응답은 text() 메서드를 사용하여 부동 요소의 텍스트를 변경하는 것입니다.

이 예제에서 만드는 드래그 앤 드롭 상호 작용은 가장 간단하지만 드래그 가능 및 놓기 가능 상호 작용이 함께 작동하는 방식을 설명하는 데 유용한 컨텍스트를 제공합니다. 요소를 끌어다 놓는 프로세스의 여러 단계가 그림에 설명되어 있습니다.

이 모든 것이 매우 간단해 보입니다. 이동 중인 요소가 수신 요소 위에 올 때까지 끌어서 놓습니다. 삭제된 요소는 원래 있던 위치에 유지되고 해당 텍스트 콘텐츠는 삭제 이벤트 발생에 따라 변경됩니다. 다음 섹션에서는 다른 Droppable 상호 작용 이벤트를 사용하여 사용자 경험을 개선하는 방법을 보여줍니다.

대상 수신 개체 강조 표시

활성화 및 비활성화 이벤트를 사용하여 사용자가 요소를 드래그하는 프로세스를 시작할 때 대상 수신 객체를 강조 표시할 수 있습니다. 많은 상황에서 이 아이디어는 어떤 요소가 끌어서 놓기 모델의 일부인지에 대한 신뢰할 수 있는 표시를 사용자에게 제공하기 때문에 매우 유용합니다. 관련 예는 다음과 같습니다.

... $(function() ( $("#draggable").draggable(); $("#droppable").droppable(( drop: function() ( $("#draggable").text("드롭 ") ), 활성화: function() ( $("#droppable").css(( border: "medium double green", backgroundColor: "lightGreen" )); ), 비활성화: function() ( $("#droppable ").css("테두리", "").css("배경색", ""); ) )); )); ... 예제 실행

사용자가 요소를 드래그하기 시작하자마자 수신 요소와 관련된 activate 이벤트가 발생하고 핸들러 함수는 css() 메서드를 사용하여 요소의 테두리 및 배경색 CSS 속성을 변경합니다. 결과적으로 대상 수신 요소가 강조 표시되어 해당 요소와 이동 중인 요소 사이에 연결이 있음을 사용자에게 나타냅니다.

deactivate 이벤트는 수신 요소에서 CSS 속성 값을 제거하고 사용자가 마우스 버튼을 놓는 즉시 재설정하는 데 사용됩니다. (이 이벤트는 드래그된 요소가 수신 요소에 남아 있는지 여부에 관계없이 요소의 드래그가 중지될 때마다 발생합니다.) 이 프로세스는 그림에 설명되어 있습니다.

요소 겹침 처리

드래그 앤 드롭 기술은 이벤트 처리를 추가하여 개선할 수 있습니다. 오버 이벤트는 이동되는 요소의 50%가 수신 요소의 어떤 부분보다 위에 있을 때 발생합니다. out 이벤트는 이전에 겹치는 요소가 더 이상 겹치지 않을 때 발생합니다. 이러한 이벤트에 대한 응답의 예는 다음과 같습니다.

$(function() ( $("#draggable").draggable(); $("#droppable").droppable(( drop: function() ( $("#draggable").text("Dropped") ) , 활성화: function() ( $("#droppable").css(( border: "medium double green", backgroundColor: "lightGreen" )); ), 비활성화: function() ( $("#droppable"). css("테두리", "").css("배경 색상", ""); ), over: function() ( $("#droppable").css(( 테두리: "중간 이중 빨간색", backgroundColor : "빨간색" )); ), 출력: function() ( $("#droppable").css("border", "").css("background-color", ""); ) )); ) ); 예제 실행

이전 예제에서와 동일한 핸들러 함수가 여기에서 사용되지만 이 경우에는 over 및 out 이벤트와 연결됩니다. 부동 요소의 50% 이상이 수신 요소와 겹치면 그림과 같이 프레임이 지정되고 배경색이 변경됩니다.

이 50% 제한을 허용 임계값이라고 하며 다음에 보여지는 것처럼 수신 요소를 생성할 때 설정할 수 있습니다.

드롭 가능한 상호 작용 설정

Droppable 상호 작용에는 동작을 사용자 지정하기 위해 수정할 수 있는 여러 속성이 있습니다. 이러한 속성은 아래 표에 나열되어 있습니다.

놓을 수 있는 상호 작용 속성
재산 설명
장애가 있는 이 옵션이 true이면 Droppable 상호 작용 기능이 처음에 비활성화됩니다. 기본값은 false입니다.
동의하기 수신 요소가 응답할 부동 요소 집합의 범위를 좁힙니다. 기본값은 *이며 모든 요소와 일치합니다.
활성 클래스 활성화 이벤트에 대한 응답으로 할당되고 비활성화 이벤트에 대한 응답으로 제거되는 클래스를 정의합니다.
호버 클래스 오버 이벤트에 대한 응답으로 할당되고 아웃 이벤트에 대한 응답으로 제거되는 클래스를 정의합니다.
용인 오버 이벤트가 발생하는 최소 겹침 정도를 지정합니다.

허용되는 부동 요소에 대한 제한

accept 옵션을 사용하여 Droppable 상호 운용성 기능이 있는 요소에서 허용할 droppable 요소 집합을 제한할 수 있습니다. 수락 옵션의 값은 선택자여야 합니다. 이 이벤트의 결과로 이동 중인 요소가 지정된 선택기와 일치하는 경우에만 Droppable 상호 작용이 발생합니다. 관련 예는 다음과 같습니다.

...

여기를 떠나
요소 1
요소 2
예제 실행

이 예에는 ID가 drag1 및 drag2인 두 개의 부동 요소가 있습니다. 허용 요소를 생성할 때 drag1 요소만 허용되는 부동 요소임을 나타내는 허용 옵션이 사용됩니다.

drag1 요소를 드래그하면 이전 예제와 동일한 효과를 볼 수 있습니다. activate, deactivate, over 및 out 이벤트는 적절한 시간에 수신 요소에서 발생합니다. 동시에 accept 매개변수에 지정된 선택자와 일치하지 않는 drag2 요소를 드래그하면 이러한 이벤트가 발생하지 않습니다. 이 요소는 자유롭게 이동할 수 있지만 수신 요소에서는 허용되지 않습니다.

text() 메서드를 호출할 수 있는 부동 요소를 선택하는 방식의 변경 사항에 유의하십시오. 문서에 부동 요소가 하나만 있을 때 id 속성으로 충분했습니다.

삭제: function() ( $("#draggable").text("Dropped") ),

이 예에는 두 개의 부동 요소가 있으며 id 속성으로 선택하면 원하는 결과를 얻을 수 없습니다. 이 경우 텍스트는 수신 요소에서 어느 것이 허용되는지에 관계없이 항상 동일한 부동 요소에서 변경되기 때문입니다.

해결책은 jQuery UI가 각 이벤트 핸들러에 대한 추가 인수로 제공하는 ui 객체를 사용하는 것입니다. ui 객체의 draggable 속성은 사용자가 드래그하거나 대상 요소에 드롭하려고 하는 요소가 포함된 jQuery 객체를 반환하므로 원하는 요소를 다음과 같이 선택할 수 있습니다.

삭제: function(event, ui) ( ui.draggable.text("Dropped") ),

겹침 임계값 변경

기본적으로 over 이벤트는 이동 중인 요소의 50% 이상이 수신 요소와 겹칠 때만 발생합니다. 이 임계값 겹침의 양은 아래 표에 표시된 값을 취할 수 있는 허용 오차 옵션을 사용하여 변경할 수 있습니다.

제가 가장 많이 사용하는 두 가지 값인 fit과 touch는 사용자에게 가장 의미가 있는 값입니다. 나는 드래그한 요소가 이동한 수신 요소의 영역에 남아 있어야 할 때 맞춤 값을 사용하고 드래그한 요소가 원래 위치로 돌아가야 할 때 터치 값을 사용합니다(예를 들어 나중에 설명하겠습니다). fit 및 touch 매개변수를 사용하는 예는 다음과 같습니다.

복제 값은 모든 콘텐츠와 함께 부동 요소의 복사본을 만들고 그 결과를 도우미 요소로 사용하도록 jQuery UI에 지시합니다. 결과는 그림에 나와 있습니다.

도우미 요소는 사용자가 이동 중인 요소 위에서 마우스 버튼을 놓으면 제거되고 이동 중인 요소와 수신 요소는 원래 위치에 그대로 유지됩니다.

그림과 같이 원래의 플로팅 요소는 제자리에 남아 있고 보조 요소만 마우스 포인터를 따라 화면을 가로질러 이동합니다. 이동하는 요소의 크기가 우리의 예와 같이 크면 문서의 나머지 요소를 덮기 때문에 사용자가 수신 요소의 위치를 ​​​​추적하기조차 어려울 것입니다. 이 문제는 아래 예제와 같이 helper 옵션의 값으로 함수를 제공하여 처리할 수 있습니다.

... $(함수() ( $("div.draggable")..png"/>") ) )); $("#basket").droppable(( activeClass: "활성", hoverClass: "hover" )); )); ... 예제 실행

사용자가 요소를 끌기 시작하면 jQuery UI는 도우미 매개변수에 지정된 함수를 호출하고 반환된 요소를 끌기 개체로 사용합니다. 이 경우 jQuery를 사용하여 img 요소를 만듭니다. 결과는 그림에 나와 있습니다.

작은 이미지는 부동 요소의 자리 표시자 역할을 하므로 문서의 다른 요소를 훨씬 쉽게 추적할 수 있습니다.

jQuery UI가 Droppable 상호 작용 이벤트에 전달하는 ui 객체에는 도우미 속성이 포함되어 있으며 이 속성을 사용하여 도우미 요소를 드래그하는 동안 조작할 수 있습니다. 다음은 over 및 out 이벤트와 함께 이 속성을 사용하는 예입니다.

... $(함수() ( $("div.draggable")..png"/>") ) )); $("#basket").droppable(( activeClass: "active", hoverClass: "hover", over: function(event, ui) ( ui.helper.css("border", "thick solid #27e6ed") ) , 출력: function(event, ui) ( ui.helper.css("border", "") ) )); )); ...

여기서 over 및 out 이벤트와 ui.helper 속성은 도우미 요소가 호스트 요소와 겹칠 때 도우미 요소 주위에 테두리를 표시하는 데 사용됩니다. 결과는 그림에 나와 있습니다.

요소의 가장자리에 맞추기

사용하여 스냅 옵션이동 중인 요소가 옆에 있는 요소의 가장자리에 "끌어당기는" 것을 달성할 수 있습니다. 이 옵션은 선택자를 값으로 사용합니다. 부동 요소는 지정된 선택기와 일치하는 요소의 가장자리에 맞춰집니다. 스냅 옵션을 사용하는 예는 다음과 같습니다.

예제 실행 제이쿼리 UI

바구니
여기에 테더
나를 끌어

움직일 수 있는 요소가 일치하는 요소 중 하나에 접근하면 인접한 가장자리가 닿는 방식으로 "끌어당겨집니다". 이러한 바인딩의 경우 수신하는 요소뿐만 아니라 모든 요소를 ​​선택할 수 있습니다. 이 예에서는 div 요소를 추가하고 문서에서 주어진 요소와 수신 요소를 선택하는 값으로 snap 옵션을 설정했습니다.

앵커링과 관련하여 요소가 작동하는 방식을 미세 조정할 수 있는 몇 가지 하위 옵션이 있습니다. 그 중 하나는 스냅 모드 옵션. 바인딩 유형을 지정하는 데 사용할 수 있습니다. 다음 값이 허용됩니다. 안의(요소의 내부 가장자리에 맞추기), 밖의(요소의 외부 가장자리에 맞추기) 및 둘 다(모든 가장자리에 맞추기, 기본값).

snapTolerance 옵션스냅이 발생하기 전에 부동 요소가 대상 요소의 가장자리에 얼마나 가까워야 하는지 지정할 수 있습니다. 기본값은 20이며 20픽셀을 의미합니다. 이 예에서는 더 먼 거리의 앵커에 해당하는 50 값을 사용합니다. 이 옵션에 대한 올바른 값을 선택하는 것이 매우 중요합니다. snapTolerance 옵션의 값이 너무 낮으면 사용자가 스냅 효과를 인지하지 못할 수 있고, 너무 높으면 이동 중인 요소가 예기치 않게 점프하기 시작하여 멀리 떨어진 요소에 스냅됩니다.

기술의 사용 끌어서 놓기 (끌어서 놓기)를 사용하면 사용자가 다양한 개체를 서로 이동할 수 있습니다(예: 한 목록의 요소를 다른 목록으로 이동). 이렇게 하려면 싱크와 소스라는 두 가지 컨트롤을 사용해야 합니다. 수신기는 원본 개체(이동 개체)를 받을 개체입니다.

물체의 이동 중에 발생하는 이벤트는 발생한 순서대로 아래에 나열됩니다.

OnStartDrag(유형 TStartDragEvent) - 작업 시작 시 소스 개체에 의해 생성됩니다. 이벤트 핸들러에 전달되는 매개변수: DragObject 수신기 개체(TDragObject 유형), 소스 개체(TObject 유형).

OnDragOver(타입 TDragOverEvent) - 부동 개체가 그 위에 배치될 때 대상 개체를 만듭니다. 이벤트 핸들러에 전달되는 매개변수: 발신자 수신자 객체(TObject 유형), 소스 소스 객체(TObject 유형), 상태 이동 상태(TDragState 유형), X 및 Y(정수 유형) - 마우스 포인터의 현재 좌표, Accept(부울 유형) ) 이동 작업 확인 표시. 이동 상태는 이동 중인 물체가 수신기 영역에 있는지 여부, 이동 중인 개체가 수신기 영역에서 이동하는지 여부를 명확하게 합니다. 전달된 매개변수를 통해 수신자 객체는 소스 객체를 수락하거나 거부할 수 있습니다. Accept 매개변수는 이동 작업이 수락되면 Try로 설정되고 그렇지 않으면 False로 설정됩니다.

onDragDrop (타입 TDragDropEvent) - 드래그된 객체가 대상 객체에 드롭될 때 대상 객체에 의해 발생합니다. 이벤트 핸들러는 마우스 포인터의 현재 좌표, Sender Receiver 객체(TObject 유형) 및 원본 Source 이동 객체(TObject 유형)를 전달합니다.

onEndDrag(EndDragEvent 유형) - 끌기 작업이 종료될 때 발생합니다. Sender 소스 개체와 Target 수신기 개체가 이벤트 핸들러에 전달되는 지점의 X 및 Y 좌표입니다.

드래그 앤 드롭을 생성하려면 DragMode 속성이 dmAutomatic으로 설정된 OnDragDrop 및 OnDragOver의 두 가지 이벤트를 구현하는 것으로 충분합니다. 그렇지 않으면 프로그래머가 이동 작업의 시작인 BeginDrag 메서드를 코딩해야 합니다.

자료를 통합하기 위해 다음 응용 프로그램을 만듭니다. 패널 구성 요소를 폼에 배치합니다. Object Inspector의 DragMode 속성을 dmAutomatic으로 설정합니다. 양식 개체를 선택하고 개체 검사기를 사용하여 다음 이벤트를 만듭니다.

프로시저 TForm1.FormDragOver(발신자, 소스: TObject, X, Y: 정수, 상태: TDragState, var 수락: 부울); Source = Panel1이면 시작하고 Accept:= True 그렇지 않으면 Accept:= False; 끝; 절차 TForm1.FormDragDrop(발신자, 소스: TObject, X, Y: 정수); beginPanel1.Left:=X; Panel1.Top:=Y; 끝;

이제 애플리케이션을 실행하고 패널 위에서 마우스 버튼을 눌러 패널 개체를 폼 전체에서 이동할 수 있습니다.

결론: 우리는 기술에 대해 알게 되었습니다. 끌어서 놓기(드래그 앤 드롭)을 실행하여 실제로 사용했습니다.