HTML5 拖拽API 学习笔记

《HTML5程序设计》学习笔记

早期的拖放思路

结合css定位,通过创建复杂的javascript库和扎实的DOM事件知识,可以近似的实现一个拖放系统。
DOM事件:mousedown / mousemove / mouseover / mouseout / mouseup
缺点:

  • 逻辑非常复杂,还要考虑边界情况
  • 对系统的完全控制,和其他页面结合使用比较困难。

哈哈,HTML5解放世界啦!

HTML5 拖放

简介

(1)蓝图

  • 拖动源
  • 放置目标

拖放并不是单纯的把目标从一个地方移动另一个地方,其实是促成成功交互的操作过程中的反馈。

  • 光标指示当前的位置是否可防置目标
  • 用户提示是移动、链接或者复制
  • 鼠标经过的地方样式改变,提示此处可以放置。

为满足以上的要求,浏览器在拖拽的每个过程中发起一系列的事件。

数据传输:一组对象,这个对象用来公开存储,拖动数据存储是拖放操作的基础。可以将传输数据理解成拖放的中央控制部分,用于反馈的图片以及数据自身的检索全部都在数据传输中管理。类似网络传输谈判,此时根本无需让拖动源和放置目标知道彼此的存在。此时其重要作用的就是MIME类型!

(2)MIME 多功能因特网邮件扩展服务

  • text/plain
  • image/png
  • image/jpeg
  • text/x-age 传递自定义的信息类型

事件

事件捕获:从父辈--→中间--→子辈
事件冒泡:反向

event.stopPropagation //阻止事件沿事件捕获链向下传递 或者 通过冒泡阶段向上传递。
event.preventDefault //阻止事件的默认行为,比如链接跳转。

事件流

dragstart事件:只能在这个事件的过程中支持dataTransfer通过setData来设置数据。这是为了安全考虑。编号1
drag事件:拖动过程中持续发生的事件。就是鼠标移动的过程中会反复的调用此事件。编号2
dragenter事件:拖动跨入了页面中新元素的时候触发,适用于设置拖放的放置反馈。编号3
dragleave事件:恢复放置反馈,与上一事件相对。编号4
dragover事件:不同于drag事件,此事件是在当前鼠标停留的目标上调用。编号5
drop事件:释放鼠标调用,要放置包含处理放置动作的代码。编号6
dragend:在拖动源中触发,适合清空拖动过程的状态。编号7

点击查看流程图

设置、传输和控制

设置可以拖动,很简单就一句话

<div id = "huang" draggable="true">

传输和控制
dataTransfer对象:用于获取和设置实际的放置数据。
函数与属性:

setData(formate, data)

getData(formate)

types 一数组形式返回所有当前注册的格式

items 返回所有想及其相关格式的列表

files 返回与放置相关的所有文件

clearData( )

//更改拖放反馈

setDragImage(element, x, y):图片出现在鼠标的旁边,则x,y就是相对鼠标的偏移了。

addElement(element)通知浏览器将参数作为拖动反馈图像来绘制。?

//设置开发人员设置和查询

effecftAllowed( )设置参数,允许用户进行何种操作,copy/link/Move/组合

dropEffect( )

理论知识就这么多了,剩下的就是实战实战,再实战的过程了!

原文地址:https://www.cnblogs.com/hzhuang/p/4372880.html