HTML5-拖拽
- 2019 年 10 月 10 日
- 筆記
将div中元素拖到另一个 中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; } .div1{ width: 200px; height: 200px; border: 1px solid red; position: relative; margin-left:20px; float: left; } .div2{ width: 200px; height: 200px; border: 1px solid blue; position: relative; margin-left:20px; float: left; } .div3{ width: 200px; height: 200px; border: 1px solid green; position: relative; margin-left:20px; float: left; } p{ background-color: orange; margin-top: 5px; } </style> </head> <body> <div class="div1" id="div1"> <!--在h5中,如果想拖拽元素,就必须为元素添加draggable="true". 图片和超链接默认就可以拖拽--> <p id="pe" draggable="true">试着把我拖过去</p> <p id="pe1" draggable="true">试着也把我拖过去</p> </div> <div class="div2" id="div2"></div> <div class="div3" id="div3"></div> <script> /*学习拖拽,主要就是学习拖拽事件*/ var p=document.querySelector("#pe"); var div2=document.querySelector("#div2"); var div1=document.querySelector("#div1"); /*应用于被拖拽元素的事件 *ondrag 应用于拖拽元素,整个拖拽过程都会调用--持续 ondragstart 应用于拖拽元素,当拖拽开始时调用 ondragleave 应用于拖拽元素,当鼠标离开拖拽元素时调用 ondragend 应用于拖拽元素,当拖拽结束时调用*/ p.ondragstart=function(){ console.log("ondragstart"); } p.ondragend=function(){ console.log("ondragend"); } p.ondragleave=function(){ console.log("被拖拽元素:ondragleave"); } p.ondrag=function(){ //console.log("ondrag"); } /*应用于目标元素的事件 *ondragenter 应用于目标元素,当拖拽元素进入时调用 ondragover 应用于目标元素,当停留在目标元素上时调用 ondrop 应用于目标元素,当在目标元素上松开鼠标时调用 ondragleave 应用于目标元素,当鼠标离开目标元素时调用*/ div2.ondragenter=function(){ console.log("ondragenter"); } div2.ondragover=function(e){ //console.log("ondragover"); /*如果想触发ondrop事件,那么就必须在这个位置阻止浏览器的默认行为*/ e.preventDefault(); } /*浏览器默认会阻止ondrop事件:我们必须在ondragover中阻止浏览器的默认行为*/ div2.ondrop=function(){ console.log("ondrop"); /*添加被拖拽的元素到当前目标元素*/ div2.appendChild(p); } div2.ondragleave=function(){ console.log("目标元素:ondragleave"); } div1.ondragover=function(e){ //console.log("ondragover"); /*如果想触发ondrop事件,那么就必须在这个位置阻止浏览器的默认行为*/ e.preventDefault(); } div1.ondrop=function(){ console.log("ondrop"); /*添加被拖拽的元素到当前目标元素*/ div1.appendChild(p); } </script> </body> </html>
自由拖拽–通用方法–使用datatrasfer
dataTransfer :https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransfer
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; } .div1{ width: 200px; height: 200px; border: 1px solid red; position: relative; margin-left:20px; float: left; } .div2{ width: 200px; height: 200px; border: 1px solid blue; position: relative; margin-left:20px; float: left; } .div3{ width: 200px; height: 200px; border: 1px solid green; position: relative; margin-left:20px; float: left; } p{ background-color: orange; margin-top: 5px; } </style> </head> <body> <div class="div1" id="div1"> <!--在h5中,如果想拖拽元素,就必须为元素添加draggable="true". 图片和超链接默认就可以拖拽--> <p id="pe" draggable="true">试着把我拖过去</p> <p id="pe1" draggable="true">试着也把我拖过去</p> </div> <div class="div2" id="div2"></div> <div class="div3" id="div3"></div> <script> /*学习拖拽,主要就是学习拖拽事件*/ var obj=null;//当前被拖拽的地元素 /*应用于被拖拽元素的事件 *ondrag 应用于拖拽元素,整个拖拽过程都会调用--持续 ondragstart 应用于拖拽元素,当拖拽开始时调用 ondragleave 应用于拖拽元素,当鼠标离开拖拽元素时调用 ondragend 应用于拖拽元素,当拖拽结束时调用*/ document.ondragstart=function(e){ /*通过事件捕获来获取当前被拖拽的子元素*/ e.target.style.opacity=0.5; e.target.parentNode.style.borderWidth="5px"; obj= e.target; /*通过dataTransfer来实现数据的存储与获取 * setData(format,data): * format:数据的类型:text/html text/uri-list * Data:数据:一般来说是字符串值*/ e.dataTransfer.setData("text/html", e.target.id); } document.ondragend=function(e){ e.target.style.opacity=1; e.target.parentNode.style.borderWidth="1px"; } document.ondragleave=function(e){ } document.ondrag=function(e){ } /*应用于目标元素的事件 *ondragenter 应用于目标元素,当拖拽元素进入时调用 ondragover 应用于目标元素,当停留在目标元素上时调用 ondrop 应用于目标元素,当在目标元素上松开鼠标时调用 ondragleave 应用于目标元素,当鼠标离开目标元素时调用*/ document.ondragenter=function(e){ console.log(e.target); } document.ondragover=function(e){ /*如果想触发ondrop事件,那么就必须在这个位置阻止浏览器的默认行为*/ e.preventDefault(); } /*浏览器默认会阻止ondrop事件:我们必须在ondragover中阻止浏览器的默认行为*/ document.ondrop=function(e){ /*添加元素*/ //e.target.appendChild(obj); /*通过e.dataTransfer.setData存储的数据,只能在drop事件中获取*/ var id=e.dataTransfer.getData("text/html"); /*console.log("id="+id);*/ e.target.appendChild(document.getElementById(id)); } document.ondragleave=function(e){ } </script> </body> </html>