html5的拖拽dragAPI(如果看了API不懂,看看那三个案例就会恍然大悟)

1.拖拽和释放定义:

  拖拽:Drag;

  释放:Drop;

2.源对象和目标对象:

  

3.相关API:

  ondragstart:源对象开始被拖动

  ondrag:源对象被拖动的过程中

  ondragend:源对象被拖动结束

  ondragenter:目标对象被源对象拖动进入

  ondragover:目标对象被源对象悬浮在上面

  ondragleave:源对象拖动着离开了目标对象

  ondrop:源对象拖动着在目标对象上方松手

4.拖动的源对象和目标对象之间的数据传递:

  源对象数据保存:e.data.Transfer.setData(k,v)//k-v必须都是string类型

  目标对象获取数据:e.data.Transfer.getData(k,v)

案例一:小猫咪随着鼠标移动

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>拖动小熊</title>
 6     <style>
 7         body{
 8             margin:0;
 9             position: relative;
10         }
11         img{
12             position:absolute;
13             width: 150px;
14             height: 150px;
15         }
16     </style>
17 </head>
18 <body>
19 <h3>随着鼠标拖动而移动的小猫咪</h3>
20 <img id="cat" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537438350926&di=d40ad5be9fac73fbcebfcbec85a88739&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fzhidao%2Fwh%253D450%252C600%2Fsign%3D88c8f471f9039245a1e0e90bb2a488f4%2F9a504fc2d5628535aedbd09d95ef76c6a7ef6356.jpg" alt=""/>
21 <script>
22     var cat = document.getElementById(‘cat‘);
23     cat.ondragstart = function(e){
24         console.log(‘cat开始移动‘);
25         offsetX = e.offsetX;
26         offsetY = e.offsetY;
27     };
28     cat.ondrag = function(e){
29         // console.log(‘事件源cat正在拖动中‘);
30         var x = e.pageX;
31         var y = e.pageY;
32         console.log(x + ‘-‘ +y);
33         if(x === 0 && y === 0){//不处理最后一刻x,y都为0 的情景
34             return
35         };
36         x -= offsetX;
37         y -= offsetY;
38         cat.style.left = x+ ‘px‘;
39         cat.style.top = y + ‘px‘;
40     }
41     cat.ondragend = function (e) {
42         console.jlog(‘cat源对象拖动结束‘)
43     }
44 </script>
45 </body>
46 </html>

案例二:淘宝购物车删除商品效果:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>小喵咪喂给大黄鱼</title>
 6     <style>
 7         body{
 8             text-align: center;
 9         }
10
11         img{
12             width: 80px;
13             height: 80px;
14             border-radius:100%;
15         }
16         #fish{
17             margin-top: 200px;
18             opacity: .2;
19         }
20     </style>
21 </head>
22 <body>
23  <h3>小喵咪拖到大黄鱼上面的时候消失(删除小喵咪)</h3>
24  <img   class="cat"   id="cat1" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537439299088&di=4abcae9fe10a919fd23695be63506d91&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01c2e05777054e0000012e7eceda20.jpg%401280w_1l_2o_100sh.jpg" alt="">
25  <img   class="cat"   id="cat2" src="http://img4.imgtn.bdimg.com/it/u=2404190189,262583459&fm=26&gp=0.jpg" alt="">
26  <img   class="cat"   id="cat3" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537439359473&di=94af89f7165210577af8d9682ca7b90b&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F031763d577b43b30000018c1bcaaa23.jpg" alt="">
27  <br>
28  <img   id="fish"   src="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2614718913,3898275106&fm=26&gp=0.jpg" alt="">
29 </body>
30 <script>
31     //要想从数据库中删除猫咪,就需要猫咪的图片地址是后台传值过来的,然后循环遍历在页面中,当拖动删除的时候,删除掉数据库中的数据即可;然后刷新页面
32     var  cat = document.getElementsByClassName(‘cat‘)//找到所有的猫咪
33     for(var i = 0;i<cat.length;i++){
34         var catSingle = cat[i];
35         catSingle.ondragstart  = function(e){//循环遍历猫咪,当dragstart拖动开始的时候,setData设置他的id到e.dataTransfer中
36             e.dataTransfer.setData(‘catId‘,this.id);
37         }
38     }
39     fish.ondragenter = function(){//当如到鱼种时候,让鱼的透明度为1;
40         console.log(‘已经拖入‘)
41         fish.style.opacity =‘1‘;
42     }
43     fish.ondragleave = function () {//拖动离开鱼的时候
44         console.log(‘拖动离开‘);
45         fish.style.opacity =‘.2‘;
46     }
47     fish.ondragover = function (e) {//拖动悬浮在鱼上
48         e.preventDefault()
49     }
50     fish.ondrop = function(e){//拖动放开时候;获取拖动开始时候设置的数据;然后从dom结构中移除;
51         console.log(‘放开拖动‘)
52         fish.style.opacity = ‘.2‘
53         var id = e.dataTransfer.getData(‘catId‘)
54         console.log(id)
55         var dragId = document.getElementById(id);
56         dragId.parentNode.removeChild(dragId)
57     }
58
59 </script>
60 </html>

案例三:将本地图片图拖动放置到浏览器中

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>拖动一张图片到浏览器中</title>
 6     <style>
 7         body{
 8             text-align: center;
 9         }
10         #container {
11             border: 1px solid #aaa;
12             border-radius: 3px;
13             padding: 10px;
14             margin: 10px;
15             min-height: 400px;
16         }
17     </style>
18 </head>
19 <body>
20
21 <h1>拖放API的扩展知识</h1>
22 <h3>请拖动您的照片到下方方框区域</h3>
23 <div id="container"></div>
24
25 <script>
26     var container = document.getElementById(‘container‘)
27    document.ondragover = function(e){
28        e.preventDefault()
29    }
30    document.ondrop = function(e){
31        e.preventDefault()
32    }
33    container.ondragover = function(e){
34        e.preventDefault()
35    }
36    container.ondrop = function(e){
37         var paper = e.dataTransfer.files[0];
38         var file = new FileReader();
39         file.readAsDataURL(paper)
40        file.onload = function(){
41             console.log(‘读取文件完成‘)
42            console.log(file.result)
43            var img = new Image();
44             img.src =file.result;
45             container.appendChild(img)
46        }
47    }
48 </script>
49 </body>
50 </html>

注意事项:浏览器问题:当ondragover触发时,ondrop会失效,因此需要阻止ondragover的默认事件;

5.HTML5的新增文件操作对象

  file:代表一个文件对象

  filelist:代表一个文件列表对象;类数组;

  fileReader:用于从文件中读取数据

  FileWriter:用于向文件中写出数据;

  相关函数:

    

 1 div.ondrop = function(e){
 2
 3 var f = e.dataTransfer.files[0];      //找到拖放的文件
 4
 5 var fr = new FileReader();        //创建文件读取器
 6
 7 fr.readAsURLData(f);         //读取文件内容
 8
 9 fr.onload = function(){       //读取完成
10
11 img.src = fr.result;        //使用读取到的数据
12
13 }
14
15  }

原文地址:https://www.cnblogs.com/yangguoe/p/9681692.html

时间: 2024-07-31 03:41:50

html5的拖拽dragAPI(如果看了API不懂,看看那三个案例就会恍然大悟)的相关文章

HTML5开发 拖拽文件上传

Drag&Drop 拖拽功能的处理 关于HTML5拖拽文件上传,其实国外已经有很多网站有这样的应用,最早推出拖拽上传应用的是 Gmail,它支持标准浏览器下拖拽本地文件到浏览器中作为邮件的附件发送,但其实现在利用HTML5的功能实现,主要借助于新版支持的浏览器来实现,IE还是弱很多. 拖拽上传应用主要使用了以下 HTML5技术: Drag&Drop : HTML5基于拖拽的事件机制.File API : 可以很方便的让 Web 应用访问文件对象,File API 包括FileList.Bl

Nodejs express、html5实现拖拽上传

Nodejs express.html5实现拖拽上传 一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.No

HTML5之拖拽(兼容IE和非IE)

前世:项目中需要拖动div,然后和某个div进行位置交换,这不是关键,关键是还要保存位置,然后在下次打开的时候按照保存的位置显示.还好本人功力深厚,一下子就想到了用localStorage来保存,事实证明真的很好用哦.保存数据的方法有了,然后开始"探索"如何用html(5)和js来实现拖拽的效果,由于H5给了比较规范的实现方式,所以在Chrome中轻松实现,万恶的IE(很少骂IE)竟然不兼容,NONONONO,心塞,只好用了两种方式分别实现拖拽效果.(其实两种方式内的代码很相似,唯一不

基于html5可拖拽图片循环滚动切换

分享一款基于html5可拖拽图片循环滚动切换.这是一款支持手机端拖拽切换的网站图片循环滚动特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="site-wrapper"> <section id="section-header" data-coloroverlap="dark"></section> <section id="second-phase&qu

HTML5 的拖拽介绍

本文主要介绍与拖拽操作相关的对象及事件信息,但并不涉及太多的源码演示. 一个简单的示例 在html5中要实现拖放操作,相对于以前通过鼠标操作实现,要简单得多,数据安全性也更有保障.只需要以下几步即可. 给被拖拽元素添加draggable属性,如果是文件拖放. 为目标元素添加一个dropzone属性,这一步也不是必须的,可以省略. 在拖拽元素的dragstart中初始化相关的数据信息,主要是DataTransfer对象. 在目标元素的dragover事件中,取消其默认操作. 在目标元素的drop事

Nodejs express、html5实现拖拽上传(转载)

一.前言 文件上传是一 个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖 拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是 expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.NodeJs基础知识 nodejs简单来说就是一个可

HTML5 鼠标拖拽以及web存储

html5 拖拽: (function(){}())执行匿名函数,要用括号包括起来: 1:用鼠标事件来做拖拽: 2:在HTML5中加入draggable="true",就可以拖拽但是是分成了两个,这个更有效率: ondragstart:拖拽开始: ondrag:拖拽中 ondragend:拖拽结束: ondragenter:进入投放去: ondragover:投放区移动: ondragleave:离开投放区: ondrop:投放区投放:           ondragover会阻止d

html5之拖拽(1)

1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>图像拖动</title> 6 7 8 <style> 9 body { 10 margin: 0px;; 11 } 12 13 .container { 14 background-color: lightcyan; 15 w

[开源应用]利用HTML5+resumableJs拖拽上传大文件

前言: 大文件传输一直是技术上的一大难点.文件过大时,一些性提交所有的内容进内存是不现实的.大文件带来问题还有是否支持断点传输和多文件同时传输. 本文以resumableJs为例,介绍了如何在ASP.NET中实现大文件传输.同时本文利用了Html5的新特性:支持拖拽. 本文的主要技术点在于:如何接收resumableJs的传送内容(官网不太清楚)和如何合并文件,难度并不高. 注:原博客中,此文章为原站点个人代码备份所用,注释不多,如有不懂,请在评论中给出. 效果: ASPX File: <htm