이번에는 H5 드래그 앤 드롭에 대한 자세한 설명을 가져왔습니다. H5 드래그 앤 드롭 사용 시 주의사항은요?
소개
드래그 앤 드롭은 개체를 잡고 나중에 다른 위치로 드래그하는 일반적인 기능입니다. HTML5에서는 드래그 앤 드롭이 표준의 일부이며 모든 요소를 드래그 앤 드롭할 수 있습니다. 먼저 작은 예를 클릭하세요. 사용자가요소
<p draggable="true" ondragstart="myFunction(event)">拖动我!</p>팁: 링크와 이미지는 기본적으로 드래그 가능하며 드래그 가능 속성이 필요하지 않습니다.
정의 및 사용법
드래그 앤 드롭 프로세스 중에 다음 이벤트가 트리거됩니다.브라우저 지원
Internet Explorer 9+, Firefox, Opera, Chrome 및 Safari는 드래그를 지원합니다. 참고: Safari 5.1.2는 드래그를 지원하지 않습니다. 요소를 드래그하면 ondragover 이벤트가 350밀리초마다 실행됩니다.예
먼저 코드를 붙여넣은 후 하나씩 설명해보세요:<!DOCTYPE html> <html> <head> <title>HTML5拖拽</title> <meta charset="utf-8"> <style> #p1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;} </style> </head> <body> <p>拖动img_w3slogo.gif图片到矩形框中:</p> <p id="p1" ondrop="drop(event)" ondragover="allowDrop(event)"></p> <br> <img id="drag1" src="images/img_w3slogo.gif" draggable="true" ondragstart="drag(event)" width="300" height="56"> <script> function allowDrop(ev){ ev.preventDefault(); } function drag(ev){ ev.dataTransfer.setData("Text",ev.target.id); } function drop(ev){ ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); } </script> </body> </html>드래그 전 페이지 효과는: 위 코드의 의미를 별도로 분석해 보겠습니다.
요소를 드래그 가능하게 설정
먼저 요소를 드래그 가능하게 만들려면 드래그 가능 속성을 true로 설정하세요.<img draggable="true">
드래그할 내용 - ondragstart 및 setData()
그런 다음 요소가 드래그됩니다. 이동하면 어떤 일이 발생합니까? 위의 예에서 ondragstart 속성은 드래그할 데이터를 지정하는 drag(event) 함수를 호출합니다. dataTransfer.setData() 메서드는 드래그된 데이터의데이터 유형과 값을 설정합니다.
function drag(ev) { ev.dataTransfer.setData("Text",ev.target.id); }이 예에서 데이터 유형은 "Text"이고 값은 드래그 가능한 요소의 ID("drag1")입니다. ).
배치 위치 - ondragover
ondragover 이벤트는 드래그된 데이터를 배치할 위치를 지정합니다. 기본적으로 데이터/요소는 다른 요소에 배치될 수 없습니다. 배치를 허용해야 하는 경우 요소의 기본 처리를 방지해야 합니다. 이 작업은 ondragover 이벤트의 event.preventDefault() 메서드를 호출하여 수행됩니다.event.preventDefault()
배치용 - ondrop
드래그된 데이터가 삭제되면 드롭 이벤트가 발생합니다. 위의 예에서 ondrop 속성은 함수 drop(event)를 호출합니다.function drop(ev) { ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); }코드 설명:
dataTransfer对象
在拖曳操作的过程中,我们可以用过dataTransfer对象来传输数据,以便在拖曳操作结束的时候对数据进行其他的操作。
对象属性:
dropEffect:设置或返回拖放目标上允许发生的拖放行为。如果此处设置的拖放行为不再effectAllowed属性设置的多种拖放行为之内,拖放操作将会失败。该属性值只允许为“null”、“copy”、“link”和“move”四值之一。
effectAllowed:设置或返回被拖动元素允许发生的拖动行为。该属性值可设为“none”、“copy”、“copyLink”、“copyMove”、“link”、“linkMove”、“move”、“all”和“uninitialized”。
items:该属性返回DataTransferItems对象,该对象代表了拖动数据。
types:该属性返回一个DOMStringList对象,该对象包括了存入dataTransfer中数据的所有类型。
对象方法:
setData(format,data):将指定格式的数据赋值给dataTransfer对象,参数format定义数据的格式也就是数据的类型,data为待赋值的数据
getData(format):从dataTransfer对象中获取指定格式的数据,format代表数据格式,data为数据。
clearData([format]):从dataTransfer对象中删除指定格式的数据,参数可选,若不给出,则为删除对象中所有的数据。
addElement(element):添加自定义图标
setDragImage(element,x,y):设置拖放操作的自定义图标。其中element设置自定义图标,x设置图标与鼠标在水平方向上的距离,y设置图标与鼠标在垂直方向上的距离。
Identify what is draggable
function dragstart_handler(ev) { console.log("dragStart"); // Add the target element's id to the data transfer object ev.dataTransfer.setData("text/plain", ev.target.id); } <body> <p id="p1" draggable="true" ondragstart="dragstart_handler(event);">This element is draggable.</p> </body>
Define the drag's data
function dragstart_handler(ev) { // Add the drag data ev.dataTransfer.setData("text/plain", ev.target.id); ev.dataTransfer.setData("text/html", "<p>Example paragraph</p>"); ev.dataTransfer.setData("text/uri-list", "http://developer.mozilla.org"); }
Define the drag image
function dragstart_handler(ev) { // Create an image and then use it for the drag image. // NOTE: change "example.gif" to an existing image or the image // will not be created and the default drag image will be used. var img = new Image(); img.src = 'example.gif'; ev.dataTransfer.setDragImage(img, 10, 10); }
Define the drag effect
function dragstart_handler(ev) { // Set the drag effect to copy ev.dataTransfer.dropEffect = "copy"; }
Define a drop zone
function dragover_handler(ev) { ev.preventDefault(); // Set the dropEffect to move ev.dataTransfer.dropEffect = "move" } function drop_handler(ev) { ev.preventDefault(); // Get the id of the target and add the moved element to the target's DOM var data = ev.dataTransfer.getData("text"); ev.target.appendChild(document.getElementById(data)); } <body> <p id="target" ondrop="drop_handler(event);" ondragover="dragover_handler(event);">Drop Zone</p> </body>
火狐浏览器拖拽问题
但是进行到这儿在火狐浏览器中发现一个问题:
html5的拖拽,用了preventDefault防止弹出新页面,但在火狐下不管用?
解决办法:
document.body.ondrop = function (event) { event.preventDefault(); event.stopPropagation(); }
或者对于上面的实例中,添加到ondrop方法里面也是可以的:
function drop(ev){ ev.preventDefault(); ev.stopPropagation(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); }
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 H5의 드래그 앤 드롭에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!