拖拽要有两个元素,一个是要拖动的元素,一个是要放置到的元素。

  1, 在默认情况下, 只有图片和文字是可以拖拽的,其它元素都不可以。因此要想使一个元素可拖动,必须设置它的draggable 属性为true, 在firefox浏览器中,还要在拖动元素的dragstart事件下,设置event.datatransfer.setData(),设置拖动的时候携带的数据 。这里要注意,draggable 是布尔值属性,一般布尔值属性,只要写上就表示它是true, 如checked 属性,但这里不是,一定要写全了 <div draggable="true"></div>

  2, 在拖动的时候,我们可以看到,我们拖动的只是一个副本,元素在其原来位置上没有任何变化。

  3, 在拖动的过程中,我们鼠标状态一直是一个圆圈,中间加一根横杆。表示禁止状态。这表明,在默认状态下,一个元素不允许放在另一个元素的上面。

  4,  在拖动的元素上,会触发三个事件,dragstart, drag, dragend.

    dragstart : 拖动开始的时候触发。在元素上面,按下鼠标左键,拖动的一瞬间触发。

      dragend: 松开鼠标后触发。

      drag: 拖动的过程中,持续触发。也就是 按下鼠标左键拖动到松开鼠标过程中,一直触发这个事件。

  要放置到的元素:我们拖动一个元素放到另一个元素身上。上面已经说过:在默认情况下,一个元素是不能放到另一个元素上面,因此这要阻止事件的默认行为。怎样才能阻止事件的默认行为? 这里要说到我们要放置到的元素,也就是目标元素,有四个事件。

      dragenter:其他元素进入时触发,

      dragover: 其他元素在其上面时触发,

      dragleave, 其他元素离开时触发,

      还有一个drop事件,拖动其他元素在其上面,然后释放鼠标时触发。

  dragover : 拖动元素在目标元素上触发,所以只要在dragover事件中阻止事件的默认行为,就可以把元素放到另一个元素身上。这时拖动元素到目标元素上时,鼠标状态变成了复制状态。

  dragdrop: 拖动元素在目标元素上,并且释放鼠标。它主要用于获取拖动元素的信息。这里还有一个默认事件,如果从桌面拖动一张图片到目标元素上,然后,释放鼠标,它会在一个新的页面打开图片。释放一个文件在目标元素上,它会以链接的方式打开元素。阻止默认事件后,不会打开文件。

  如果想读取或显示我们拖入的文件, 那就用到file API.  在dropover 事件中,我们拖入的文件信息保存在e.datatransfer.files 数组中。它是一个类数组,有一个length属性,显示我们一共放入了多少文件,通过提供索引可以访问任何一个文件, var filelist = e.datatransfer.files ; filelist[0] 就表示第一个文件。每一个文件都有name, type, size 属性, filelist[0].size 表示文件大小。

  如果想进一步读取文件,就要用到了,FileReader Api.  FileReader  是一个对象,使用之前,先实例化。读取方式有三种,FileReader.readAsArrayBuffer()    FileReader.readAsDataURL()   FileReader.readAsText() ,它们都接受一个文件,作为参数, 通过名字可以看出它们读取的方式不一样, arrayBuffer, 读取的结果以二进制数组返回。还有一个abort 方法,中断读取。

  读取的过程中会有几个事件:

  Onload, onerror, onprogress. 这和ajax 是一致的,读取完成后,触发onload 事件。Onload事件里面通过this.resault 获取了读取的结果。

dragZone.ondrop = function(e){   // 打开方式是以链接的方进打开,阻止默认行为

            var filefirst = e.dataTransfer.files[0];
            var fileR = new FileReader();
            fileR.readAsDataURL(filefirst);
            fileR.onload = function(){
                var img = document.createElement("img");
                img.src = this.result;
                dragZone.appendChild(img);
            }
            e.preventDefault();

        }

Html5 拖拽api的更多相关文章

  1. 基于html5拖拽api实现列表的拖拽排序

    基于html5拖拽api实现列表的拖拽排序 html代码: <ul ondrop="drop_handler(event);" ondragover="dragov ...

  2. jQ插件--时间线插件和拖拽API

    这个时间轴是工作上用到的,自己写了一个, qq空间有时间轴的控件, 百度文库也有时间轴的控件: 百度的时间轴大概是这样的: 用户点击对应的锚链接,  那个三角会滚动, 然后左侧的界面也会滚动: 实际的 ...

  3. HTML5拖拽功能中 dataTransfer对象详解

    有了HTML5,老板再也不用担心我们的上传了,再加上有拖拽上传是不是很酷.百度一下,有关HTML5拖拽上传的文章和实例不少,都缺不了一个至关重要的东东DataTransfer.但是详细介绍的不多,尤其 ...

  4. Html5拖拽复制

    拖拽是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖拽是标准的一部分,任何元素都能够拖拽. Html5拖拽非常常见的一个功能,但是大部分拖拽的案例都是一个剪切的过程, 项目中需 ...

  5. html5拖拽

    html5拖拽一 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  6. HTML5 拖拽复制功能的实现方法

    Internet Explorer 9FirefoxOpera 12ChromeSafari 5 v1.0代码部分 <!DOCTYPE html><html><head& ...

  7. 每天一个JavaScript实例-html5拖拽

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. HTML5拖拽练习

    HTML5提供专门的拖拽与拖放的API,以后实现这类效果就不必乱折腾了 相关属性和事件如下: 1.DataTransfer 对象:退拽对象用来传递的媒介,使用一般为Event.dataTransfer ...

  9. html5 拖拽(drag)和f放置(drop)

    知识要点 HTML5 (drag&drop) API  (Event) 拖放数据(对象):DataTransfer 拖放内容:setData getData 拖放效果(动作):dropEffe ...

随机推荐

  1. ASP.NET 管道

    序号 名称 说明 1 BeginRequest ASP.NET开始处理的第一个时间,表示处理的开始 2 AuthenticateRequest 验证请求,一般用来取得请求的用户信息 3 PostAut ...

  2. LDAP1-安装部署LDAP服务

    基于Linux部署openldap服务 参考文档: https://blog.csdn.net/computer1024/article/details/78172785 参考文档:  https:/ ...

  3. 圆角矩形shader

    在游戏中,有时需要对一张矩形图片进行切割,绘制成圆角矩形. circelrect.vert attribute vec4 a_position; attribute vec4 a_normal; at ...

  4. 史上最全面的Docker容器引擎使用教程

    目录 1.Docker安装 1.1 检查 1.2 安装 1.3 镜像加速 1.4 卸载Docker 2.实战Nginx 3.Docker命令小结 4.DockerFile创建镜像 4.1 Docker ...

  5. A2D JS框架 - AOP封装

    AOP在js中的实现,先看看用法吧: var A2D = $.noConflict();//不要误会,此乃我自己写的A2D框架,非jQuery function fn1(name, age) { co ...

  6. H5 68-伪元素选择器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 便于记忆的SA构造

    首先学习基数排序. memset(b, 0, sizeof(b)); for(int i = 0; i < n; i++) b[a[i]]++; for(int i = 1; i <= m ...

  8. hdu1201,hdu6252差分约束系统

    差分约束系统一般用来解决a-b>=c的问题,有n个这样的限制条件,求出某个满足这些条件的解 可以将这个问题转化成最长路问题,即b到a的距离最少为c,而有多条b到a的路的话,我们就取最长的b到a的 ...

  9. mysql_建表

    建表 某字段多个默认值 创建表时,对多选多的字段设置两个以上的默认值时,两个默认值之间用逗号','隔开,不能加空格. create table student2( id int not null, n ...

  10. Vue使用的一些实例

    1.实现歌曲的点击切换. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...