• html-拖放-Drag&Drop


    用处及优势

    1. 提供专门的拖拽与投放的API
    2. 出发多个事件,可控制鼠标的形状与移动是的效果
    3. 可以跨页面拖放

    拖放API的基本操作语法

      draggabel属性 

      拖拽事件-ondragstart , drag , dragend

      拖放事件-dragenter , dragover , drop

      dataTransfer对象- setData / getData / setDragImage

    实现拖拽垃圾桶效果

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <style>
        body{
          margin: 0;
        }
        ul{
          overflow: hidden;
          padding: 0;
          margin: 0;
        }
        li{
          width: 100px;
          height: 50px;
          line-height: 50px;
          text-align: center;
          border: 1px solid #000;
          /* margin: 20px; */
          float: left;
          list-style: none;
        }
        #out{
          width: 100px;
          height: 150px;
          line-height: 150px;
          margin: 50px;
          border: 1px solid #000;
          text-align: center;
        }
      </style>
    </head>
    <body style="position:relative">
    
      <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>
      <script type="text/javascript">
        window.onload=function(){
          let ali=document.getElementsByTagName('li')
          let oDiv=document.getElementById("out")
          let txt=document.getElementById("txt")
          let targetLi=null  //用来储存当前拖拽的dom元素
          let img=document.createElement('img')//定义拖拽的图片
          img.src='img/1111.jpg'
          //给没给拖拽元素赋方法
          for(var i=0;i<ali.length;i++){
            //开始
            ali[i].ondragstart=function(ev){
              this.style.background='yellow'
              targetLi=this
              ev.dataTransfer.setData('Text',this.innerHTML) //文本数据的携带
              // ev.dataTransfer.setDragImage(img,20,20)
            }
            //结束
            ali[i].ondragend=function(e){
              
              this.style.background=''
            }
          }
          oDiv.ondragenter=function(){
            this.style.borderColor='red'
          }
          oDiv.ondragover=function(e){
            // console.log(e)
            e.preventDefault()
          }
          oDiv.ondragleave=function(e){
            this.style.borderColor='#000'
          }
          oDiv.ondrop=function(ev){
            this.style.borderColor='#000'
            let oText=ev.dataTransfer.getData('Text')
            txt.innerHTML='删除的是:'+ oText
            targetLi.parentNode.removeChild(targetLi)
          }
        }
      </script>
    </html>

     实现拖动效果

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <style>
        body{
          margin: 0;
        }
        ul{
          overflow: hidden;
          padding: 0;
          margin: 0;
        }
        li{
          width: 100px;
          height: 50px;
          line-height: 50px;
          text-align: center;
          border: 1px solid #000;
          /* margin: 20px; */
          float: left;
          list-style: none;
        }
      </style>
    </head>
    <body style="position:relative">
    
      <ul>
        <li draggable="true">白色垃圾</li>
        <li draggable="true">生活垃圾</li>
        <li draggable="true">厨余垃圾</li>
        <li draggable="true">有害垃圾</li>
        <li draggable="true">可回收垃圾</li>
      </ul>
    
    </body>
      <script type="text/javascript">
        window.onload=function(){
          let ali=document.getElementsByTagName('li')
          let oDiv=document.getElementById("out")
          let txt=document.getElementById("txt")
          let targetLi=null  //用来储存当前拖拽的dom元素
          let img=document.createElement('img')//定义拖拽的图片
          img.src='img/1111.jpg'
          let pageY=0 //start偏移量
          let pageX=0
          //给没给拖拽元素赋方法
          for(var i=0;i<ali.length;i++){
            //开始
            ali[i].ondragstart=function(ev){
              console.log(ev,1)
              pageY=ev.pageY
              pageX=ev.pageX
              this.style.background='yellow'
              targetLi=this
              ev.dataTransfer.setData('Text',this.innerHTML) //文本数据的携带
              // ev.dataTransfer.setDragImage(img,20,20)
            }
            //结束
            ali[i].ondragend=function(e){
              this.style.position='absolute'
              let top=this.style.top?Number(this.style.top.replace('px','')):0
              let left=this.style.left?Number(this.style.left.replace('px','')):0
              this.style.top=top+e.pageY-pageY+'px'
              this.style.left=left+e.pageX-pageX+'px'
              this.style.background=''
            }
          }
        }
      </script>
    </html>
  • 相关阅读:
    第28月第23天 lineFragmentPadding
    第28月第22天 iOS动态库
    第28月第21天 记事本Unicode 游戏编程中的人工智能技术
    第28月第11天 vim -b
    第28月第10天 iOS动态库
    第28月第8天
    第28月第7天 本地摄像头方向
    第28月第5天 uibutton交换方法
    第28月第4天 __bridge_transfer
    python __getattr__ __setattr__
  • 原文地址:https://www.cnblogs.com/lxz-blogs/p/13931541.html
Copyright © 2020-2023  润新知