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>