Html轻松使用拖拽实现垃圾桶,代码带注释,包你能看懂

时间:2024-04-05 13:10:57

效果

Html轻松使用拖拽实现垃圾桶,代码带注释,包你能看懂Html轻松使用拖拽实现垃圾桶,代码带注释,包你能看懂

参考教程:

W3school:

http://www.w3school.com.cn/html5/html_5_draganddrop.asp

菜鸟教程:

http://www.runoob.com/jsref/event-ondragend.html

关键知识点:

在拖动目标上触发事件 (源元素):
ondragstart - 用户开始拖动元素时触发
ondrag - 元素正在拖动时触发
ondragend - 用户完成元素拖动后触发

释放目标时触发的事件:
ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件
ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件
ondrop - 在一个拖动过程中,释放鼠标键时触发此事件

实现

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>垃圾箱</title>
  <style>
 ul{
  overflow:hidden;
 }
 li{
  width:80px;
  height: 50px;
  line-height:50px;
  border:1px solid #000;
  margin:20px;
  list-style:none;
  float:left;

 }

 #out{
  width:100px;
  height: 150px;
  background:url() 0 0 no-repeat;
  margin:100px;
  background-size:100%;
  color:red;
  border:4px solid #000;
  text-align:center;
 }
  </style>

 </head>
 <script type="text/javascript">
  window.onload=function(){
  <!-- 获取到所有li标签 -->
  var ali=document.getElementsByTagName('li');
  <!-- 通过id获取到垃圾箱 -->
  var oDiv=document.getElementById("out");
  <!-- 通过id获取到删除提示 -->
  var txt=document.getElementById("txt");

  var targetLi=null
  
  //拖拽事件,循环获取到的li标签的长度
  for(var i=0;i<ali.length;i++){
   <!-- ondragstart 事件在用户开始拖动元素或选择的文本时触发。 -->
   <!-- 这里是拖动每一个li标签时触发函数 -->
   ali[i].ondragstart=function(ev){
    <!-- 将拖动的元素的背景颜色设置为黄色 -->
    this.style.background='yellow'; 
    <!-- 将当前拖拽的元素赋给targetLi -->
    targetLi=this;
    <!-- dataTransfer.setData() 方法设置被拖数据的数据类型和值 -->
    <!-- 在这个例子中,数据类型是 "Text",值是拖动元素的 innerHTML -->
    ev.dataTransfer.setData('Text',this.innerHTML);
    
   }
   <!-- ondragend 事件在用户完成元素或首选文本的拖动时触发 -->
   ali[i].ondragend=function(){
    this.style.backgroud=""
   }
  }
  <!-- ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件 -->
  oDiv.ondragenter=function(){
   this.style.borderColor='red'
  }
  <!-- ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件 -->
  oDiv.ondragover=function(ev){
   ev.preventDefault()
  }
  <!-- ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件 -->
  <!-- 离开后垃圾箱边框恢复黑色 -->
  oDiv.ondragleave=function(){
   this.style.borderColor='#000'
  }
  <!-- ondrop - 在一个拖动过程中,释放鼠标键时触发此事件 -->
  oDiv.ondrop=function(ev){
   this.style.borderColor='#000'
   var oText=ev.dataTransfer.getData('Text');
   txt.innerHTML="删除的是:"+oText;
   targetLi.parentNode.removeChild(targetLi);
  }


 }
 
 </script>
 <body>
  <ul>
 <li draggable="true">白色垃圾</li>
 <li draggable="true">大气污染</li>
 <li draggable="true">香蕉皮</li>
 <li draggable="true">易拉罐</li>
 <li draggable="true">白色垃圾</li>
 
 
  </ul>

  <p id="txt"></p>

  <div id="out">垃圾箱</div>
 </body>
</html>