Html5 拖拽api
拖拽要有两个元素,一个是要拖动的元素,一个是要放置到的元素。
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的更多相关文章
- 基于html5拖拽api实现列表的拖拽排序
基于html5拖拽api实现列表的拖拽排序 html代码: <ul ondrop="drop_handler(event);" ondragover="dragov ...
- jQ插件--时间线插件和拖拽API
这个时间轴是工作上用到的,自己写了一个, qq空间有时间轴的控件, 百度文库也有时间轴的控件: 百度的时间轴大概是这样的: 用户点击对应的锚链接, 那个三角会滚动, 然后左侧的界面也会滚动: 实际的 ...
- HTML5拖拽功能中 dataTransfer对象详解
有了HTML5,老板再也不用担心我们的上传了,再加上有拖拽上传是不是很酷.百度一下,有关HTML5拖拽上传的文章和实例不少,都缺不了一个至关重要的东东DataTransfer.但是详细介绍的不多,尤其 ...
- Html5拖拽复制
拖拽是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖拽是标准的一部分,任何元素都能够拖拽. Html5拖拽非常常见的一个功能,但是大部分拖拽的案例都是一个剪切的过程, 项目中需 ...
- html5拖拽
html5拖拽一 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- HTML5 拖拽复制功能的实现方法
Internet Explorer 9FirefoxOpera 12ChromeSafari 5 v1.0代码部分 <!DOCTYPE html><html><head& ...
- 每天一个JavaScript实例-html5拖拽
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- HTML5拖拽练习
HTML5提供专门的拖拽与拖放的API,以后实现这类效果就不必乱折腾了 相关属性和事件如下: 1.DataTransfer 对象:退拽对象用来传递的媒介,使用一般为Event.dataTransfer ...
- html5 拖拽(drag)和f放置(drop)
知识要点 HTML5 (drag&drop) API (Event) 拖放数据(对象):DataTransfer 拖放内容:setData getData 拖放效果(动作):dropEffe ...
随机推荐
- Clustering[Introduction]
0. 聚类步骤 为了完成一个聚类任务,必须遵循以下步骤: 特征选择:合适的选择特征,尽可能多的包含任务关心的信息,使得信息冗余减少和最小化是主要目标: 近邻测度:用于定量测量两个特征向量如何" ...
- MongoDB的分片集群搭建
MongoDB的最为自豪的一个特色之一,分片. 参考官方文档: https://docs.mongodb.com/manual/sharding/ 单机压力,高频查询CPU,IO 单表压力,百万千万 ...
- vue 中给组建绑定原生事件@click.native=""
<template> <div class="div"> //组建使用 <v-header @click.native=& ...
- Django Rest framework基础使用之Request/Response
1.Request restframework提供了一个Request对象(rest_framework.request.Request) Request对象继承了Django默认的HttpReque ...
- STL vector用法
基本操作 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t&am ...
- stark组件之展示数据(查)
1.编辑按钮构建完成 2.构造表头,删除,checkbox,links编辑 3.代码+总结 1.编辑按钮构建完成 1.必备知识预习 第一个会打印5. 第二个输出alex alex是person ...
- 单例模式及设计url分发
1.单例模式 2.admin源码解析 3.注册源码流程图 3.admin之url方法的使用 4.admin源码之url设计 5.设计url源码流程 6.总结 1.单例模式 https://www. ...
- rest-framework频率组件
throttle(访问频率)组件 1.局部视图throttle from rest_framework.throttling import BaseThrottle VISIT_RECORD={} c ...
- 查看mysql数据库连接数、并发数相关信息
查看mysql数据库连接数.并发数相关信息. - caodongfang126的博客 - CSDN博客 https://blog.csdn.net/caodongfang126/article/det ...
- 【Python3练习题 005】输入三个整数x,y,z,请把这三个数由小到大输出
import re x, y, z = re.split(',| |,| ', input('请输入3个数字,用逗号或空格隔开:'))x, y, z = int(x), int(y), int(z) ...