HTML5拖拽API經典案例详解

日期:2021-02-23 类型:科技新闻 

关键词:h5互动游戏,微信h5怎么制作,h5转盘抽奖,h5测试制作,凡科H5

1、有关拖拽API

拖拽API是HTML5的新特点,相对别的新特点来讲,关键水平占到6成,具体开发设计中应用占比占到3成,学习培训规定本人觉得是做到把握便可的水平。

2、甚么是拖拽和释放出来?

拖拽:Drag

释放出来:Drop

拖拽指的是电脑鼠标点一下源目标后1直挪动目标不松手,1但松手即释放出来了

3、甚么是源目标和总体目标目标?

源目标:指的是大家电脑鼠标点一下的1个事情,这里能够是1张照片,1个DIV,1段文字这些。

总体目标目标:指的是大家拖拽源目标后挪动到1块地区,源目标能够进到这个地区,能够在这个地区上方悬停(未松手),能够释松手释放出来将源目标置放此处(已松手),还可以悬停后离去该地区。

4、拖拽API的有关涵数

解释了甚么是源目标和总体目标目标后,重归前端开发中的拖拽API,由上面的实际操作大家能够得出几个涵数

被拖拽的源目标能够开启的恶性事件:

(1)ondragstart:源目标刚开始被拖拽

(2)ondrag:源目标被拖拽全过程中(电脑鼠标将会在挪动也将会未挪动)

(3)ondragend:源目标被拖拽完毕

  拖拽源目标能够进到到上方的总体目标目标能够开启的恶性事件:

(1)ondragenter:总体目标目标被源目标拖拽着进到

(2)ondragover:总体目标目标被源目标拖拽着悬停在上方

(3)ondragleave:源目标拖拽着离去了总体目标目标

(4)ondrop:源目标拖拽着在总体目标目标上方释放出来/松手

拖拽API一共便是7个涵数!!

5、怎样在拖拽的源目标恶性事件和总体目标目标恶性事件间传送数据信息

HTML5为全部的拖拽有关恶性事件出示了1个新的特性:

e.dataTransfer { }          //数据信息传送目标

  作用:用于在源目标和总体目标目标的恶性事件间传送数据信息

源目标上的恶性事件解决中储存数据信息:

e.dataTransfer.setData( k,  v );     //k-v务必全是string种类

总体目标目标上的恶性事件解决中载入数据信息:

var v = e.dataTransfer.getData( k );

示例1:完成1个能够伴随着电脑鼠标拖拽而挪动的小飞机

提醒:飞机必须肯定精准定位!ondrag恶性事件中获得电脑鼠标的座标值!!!

编码以下:

<!DOCTYPE html>  
<html>  
<head lang="en">  
    <meta charset="UTF⑻">  
    <title></title>  
    <style>  
        body{  
            margin:0;  
            position: relative;  
        }  
        img{  
            position:absolute;  
        }  
    </style>  
</head>  
<body>  
<h3>伴随着电脑鼠标拖拽而挪动的小飞机</h3>  
<img id="p3" src="img/p3.png" alt=""/>  
<script>  
    p3.ondragstart=function(e){  
        console.log('恶性事件源p3刚开始拖拽');  
        //纪录刚1拖拽时,电脑鼠标在飞机上的偏位量  
        offsetX= e.offsetX;  
        offsetY= e.offsetY;  
    }  
    p3.ondrag=function(e){  
        console.log('恶性事件源p3拖拽中');  
        var x= e.pageX;  
        var y= e.pageY;  
        console.log(x+'-'+y);  
        //drag恶性事件最终1刻,没法载入电脑鼠标的座标,pageX和pageY都变成0  
        if(x==0 && y==0){  
            return; //不解决拖拽最终1刻X和Y都为0的情况  
        }  
        x-=offsetX;  
        y-=offsetY;  
        p3.style.left=x+'px';  
        p3.style.top=y+'px';  
    }  
    p3.ondragend=function(){  
        console.log('源目标p3拖拽完毕');  
    }  
</script>  
</body>  
</html>  

实际效果以下:

示例2:

仿真模拟电脑上中 ”废弃物桶“的实际效果, 一共显示信息3个小飞机,拖拽着某个小飞机到废弃物桶上方后,小飞机从DOM树上删掉

提醒:删掉必须从DOM子连接点中删掉元素,必须阻拦ondragover的默认设置个人行为!!运用源目标和总体目标目标的数据信息传送纪录小飞机的ID值!!!

关键信息内容:

ondragover有1个默认设置个人行为!!!那便是当ondragover开启时,ondrop会无效!!!!这个将会是访问器的版本号难题,必须之后访问器持续升级将会才会处理!!

怎样阻拦?

ondragover= function(e){  //源目标在悬停在总体目标目标上时
  e.preventDefault();  //阻拦默认设置个人行为,使得drop能够开启
 .....
}
ondrop= function(e){  //源目标松手释放出来在了总体目标目标中
 .....
}

编码以下:

<!DOCTYPE html>  
<html>  
<head lang="en">  
  <meta charset="UTF⑻">  
  <title></title>  
  <style>  
    body {  
      text-align: center;  
    }  
    #trash {  
      opacity: .2;  
      margin: 15px;  
    }  
  </style>  
</head>  
<body>  
  <h3>拖拽飞机到废弃物桶后从DOM树中删掉子元素</h3>  
  <img id="trash" src="img/trash_full.png">  
  <hr/>  
  <img id="p3" class="src" src="img/p3.png">  
  <img id="p4" class="src" src="img/p4.png">  
  <img id="p5" class="src" src="img/p5.png">  
  <script>  
    //为源目标加上恶性事件监视 —— 纪录拖拽了哪个源目标  
    var srcList = document.querySelectorAll('.src');//寻找所有img元素  
    for(var i=0; i<srcList.length; i++){ //遍历img元素  
      var p = srcList[i];  
      p.ondragstart = function(e){ //刚开始拖拽源目标  
        e.dataTransfer.setData('PlaneID',this.id);//储存数据信息--该img元素的id  
      }  
      p.ondrag = function(){}  
      p.ondragend = function(){}  
    }  
    //为总体目标目标加上恶性事件监视 —— 删掉拖拽的源目标  
    trash.ondragenter = function(){ //源目标进到总体目标目标  
      console.log('drag enter');  
      trash.style.opacity = "1"; //将全透明度变为1  
    }  
    trash.ondragleave= function(){  //源目标离去总体目标目标后  
      console.log('drag leave');  
      trash.style.opacity = ".2"; //将全透明度变成0.2  
    }  
    trash.ondragover= function(e){  //源目标在悬停在总体目标目标上时  
      e.preventDefault();  //阻拦默认设置个人行为,使得drop能够开启  
    }  
    trash.ondrop= function(e){ //源目标松手释放出来在了总体目标目标中  
      console.log('drop');  
      trash.style.opacity = ".2"; //将全透明度变成0.2  
      //删掉被拖拽的源目标  
      var id = e.dataTransfer.getData('PlaneID');//获得数据信息--id值  
      var p = document.getElementById(id); //依据id值寻找有关的元素  
      p.parentNode.removeChild(p);  //从父元素中删掉子连接点  
    }  
  </script>  
</body>  
</html>  

实际效果以下:

拖拽小飞机到废弃物桶删掉后:

如图,本来3架小飞机,如今变为了两架!!!

6、拖拽API的填补专业知识点!!(关键,招聘面试中或许会问到噢!!)

招聘面试题:

怎样在网页页面中显示信息顾客端(电脑上)的1张照片?

怎样拖拽顾客端网页页面显示信息在服务器端免费下载的网页页面中?

这两个难题是甚么意思呢?

大家平常在电脑上中拖拽1张照片到访问器中完成的免费下载实际操作!!!依照H5以前的规范,要完成立即拖拽1张照片到访问器中显示信息是没法进行!!可是自从H5新特点出来以后提升了拖拽API的特点,完善的完成了这1作用!!!

运用场所:

在某网站上,提交照片作为是头像

提交相片...

HTML5新增的文档实际操作目标:

File: 意味着1个文档目标

FileList: 意味着1个文档目录目标,类数字能量数组

FileReader:用于从文档中载入数据信息

FileWriter:用于向文档中写出数据信息

有关涵数:

div.ondrop = function(e){
var f = e.dataTransfer.files[0];      //寻找拖放的文档
var fr = new FileReader();        //建立文档载入器
fr.readAsURLData(f);         //载入文档內容
fr.onload = function(){       //载入进行
img.src = fr.result;        //应用载入到的数据信息
}
 }

编码以下:

<span style="font-size: 18px;"><!DOCTYPE html>  
<html>  
<head lang="en">  
  <meta charset="UTF⑻">  
  <title></title>  
  <style>  
    #container {  
      border: 1px solid #aaa;  
      border-radius: 3px;  
      padding: 10px;  
      margin: 10px;  
      min-height: 400px;  
    }  
  </style>  
</head>  
<body>  
  <h1>拖放API的拓展专业知识</h1>  
  <h3>请拖拽您的相片到正下方方框地区</h3>  
  <div id="container"></div>  
  <script>  
    //监视document的drop恶性事件——撤销其默认设置个人行为:在新对话框中开启照片  
    document.ondragover = function(e){  
      e.preventDefault(); //使得drop恶性事件能够开启  
    }  
    document.ondrop = function(e){  
      e.preventDefault(); //阻拦在新对话框中开启照片,不然依然会实行免费下载实际操作!!!  
    }  
    //监视div#container的drop恶性事件,想方设法载入到释放出来的照片数据信息,显示信息出来  
    container.ondragover = function(e){  
      e.preventDefault();  
    }  
    container.ondrop = function(e){  
      console.log('顾客端拖拽着1张照片释放出来了...')  
      //当今的总体目标目标载入拖放源目标储存的数据信息  
      //console.log(e.dataTransfer); //显示信息有难题  
      //console.log(e.dataTransfer.files.length); //拖进来的照片的数量  
      var f0 = e.dataTransfer.files[0];  
      //console.log(f0); //文档目标 File  
      //从文档目标中载入数据信息  
      var fr = new FileReader();  
      //fr.readAsText(f0); //从文档中载入文字标识符串  
      fr.readAsDataURL(f0); //从文档中载入URL数据信息  
      fr.onload = function(){  
        console.log('载入文档进行')  
        console.log(fr.result);  
        var img = new Image();  
        img.src = fr.result; //URL数据信息  
        container.appendChild(img);  
      }  
    }  
  </script>  
</body>  
</html></span>  

实际效果以下:

总结

以上所述是网编给大伙儿详细介绍的HTML5拖拽API經典案例详解,期待对大伙儿有一定的协助,假如大伙儿有任何疑惑请给我留言,网编会立即回应大伙儿的。在此也十分谢谢大伙儿对脚本制作之家网站的适用!