JS魔法堂:IE5~9的Drag&Drop API

简介:

一、前言                                

 《 HTML5魔法堂:全面理解Drag & Drop API》中提到从IE5开始已经支持DnD API,但IE5~9与HTML5的API有所不同,下面我们来了解一下吧!

 

二、IE5~9与HTML5的DnD API的不同点                   

  1. IE5~9DnD API仅对 img元素 、 a[href]元素 和 input[type=text]/textarea元素 中被选中的文字有效,且不用设置 draggable="true" ; 而HTML5中凡是设置了 draggable="true" 特性的,均会启用DnD API。

  2. IE5~9下的[object DataTransfer]存储的大类型中,不支持文件类型,仅支持字符串类型。因此无法实现从外部拖拽文件到文档内,实现文件上传的功能。

 

三、生命周期                             

   dragstart -> drag -> dragenter -> dragover ->  dragleave  -> drop -> dragend 

 

四、[object DataTransfer]类型                       

 void setData({DOMString} format, {DOMString} data) :将指定格式的数据赋值给dataTransfer,format值范围为URL、Text。

 DOMString getData({DOMString} format) :从DataTransfer对象中获取指定格式的数据。

 void clearData([{DOMString} format]) :从DataTransfer对象中删除指定格式或全部数据,仅在dragstart中调用。

 effectAllowed 和 dropEffect 的取值范围和作用请浏览《 HTML5魔法堂:全面理解Drag & Drop API#t8

 实测效果(由于我是在IE11下通过切换文档模式来测试的,测试结果可能与实际的IE5~9有所差别,欢迎各位指正!)

浏览器 effectAllowed默认值 effectAllowed值 dropEffect默认值 默认使用的鼠标指针效果
IE5~9 uninitialized uninitialized copy copy
copy copy copy
move move move
link link link
copyMove none copy
copyLink none link
linkMove none link
备注:

1. 不能通过 shift键 切换copyLink,copyMove和linkMove的样式;

2. 若effectAllowed设置为copyLink、copyMove或linkMove,且dropEffect与之对应,则鼠标样式将为dropEffect所设置的样式

 

 五、深入探讨各种DnD方式                         

   拖拽方式分为:页面内部的拖拽释放、同域页面间的拖拽释放、异域页面间的拖拽释放、从操作系统拖拽资源到页面、从页面拖拽元素到操作系统或其他程序中释放。

   IE5~9的情况

拖拽方式 默认效果
页面内部的拖拽释放

1。拖拽 img元素a[href]元素 时,对应的元素跟随鼠标移动,但释放无果;

2.  拖拽 input[type=text]/textarea元素 中被选中的文字时,若在其他 input[type=text]/textarea元素  上释放,则会执行剪切粘贴操作。

同域页面间的拖拽释放

1.拖拽 img元素 和 a[href]元素 时,将使释放所在的页面重定向到图片或超链接资源;

2.拖拽 input[type=text]/textarea元素 中被选中的文字时,若在其他 input[type=text]/textarea元素 上释放,则会执行剪切粘贴操作;

3. 多个页面共享dataTransfer对象;

4. 拖拽 img元素 时会自动将图片地址通过setData保存到Text和URL格式中。

5. 拖拽 a[href]元素 时会自动将资源地址通过setData保存到Text和URL格式中

6. 拖拽 input[type=text]/textarea 中选中的文字时会自动将文本通过setData保存到Text格式中(URL格式返回null)

异域页面间的拖拽释放

1. dataTransfer对象不被共享;

2. 拖拽img元素 和a[href]元素 时,将使释放所在的页面重定向到图片或超链接资源;

3. 拖拽input[type=text]/textarea元素 中被选中的文字时,若在其他input[type=text]/textarea元素 上释放,则会执行剪切粘贴操作;  

从操作系统拖拽资源到页面  效果与异域页面间的拖拽释放一致
从页面拖拽元素到操作系统或其他程序中释放

 1. 拖拽img元素a[href]元素时,释放将会将元素保存为图片和网页文件(根据浏览器安全设置,会弹出二次确定窗口)

 2. 拖拽input[type=text]/textarea元素 中被选中的文字时,在非OS自带的文本编辑器中释放时,会执行复制粘贴操作。 

   Chrome的情况

          效果与IE5~9的相同,就是多了下面的几点而已。

   1. 从操作系统拖拽资源到页面,若拖拽的时文件资源,且在 input[type=file]元素 上释放,则文件路径等信息会自动附加到 input[type=file]元素 上;

          2. 从页面拖拽元素到操作系统活其他程序中释放,除上述三种的其他 [draggable=true]元素 ,默认是可拖拽但无法释放的。可通过 dataTransfer.setData 设置有效的URL格式数据,则可桌面等地方释放元素,且效果与释放超链接一致; 也可通过 dataTransfer.setData 设置Text格式数据,则可在非OS自带的文本编辑器中释放元素,效果与 input[type=text]/textarea元素中被选中的文字一致。

   

六、不对称拖拽效果示例                             

   针对异域页面拖拽释放,我们举个栗子!

   页面A:a.test.com,页面B:b.test.com

   由于两个属于异域页面,因此默认情况下是无法共享dataTransfer的。现在通过 document.domain='test.com'; 修改页面A所属域,此时从页面A开始拖拽,到页面B释放,dataTransfer对象将被共享。而从页面B开始拖拽,到页面A释放,dataTransfer将无法共享。

 

七、总结                                    

   由于IE5~9原生DnD API功能不全,导致比较少人愿意了解它,相关资料也相对难找。上述内容均为个人测试结果,若有纰漏,欢迎大家指正,谢谢!

目录
相关文章
|
1月前
|
JavaScript 前端开发 API
常用JavaScript 数组 API大全
常用JavaScript 数组 API大全
32 0
|
1月前
|
API
egg.js 24.2写第一个api接口
egg.js 24.2写第一个api接口
71 0
|
3月前
|
分布式计算 JavaScript 前端开发
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
|
2月前
|
Web App开发 JavaScript NoSQL
深入浅出:构建基于Node.js的RESTful API
在当今快速发展的互联网时代,RESTful API已成为前后端分离架构中不可或缺的一部分。本文旨在为初学者和中级开发人员提供一个清晰、简洁的指南,详细介绍如何使用Node.js构建一个高效、可维护的RESTful API。通过结合实际案例,本文将从API设计理念出发,深入讲解如何利用Express框架及MongoDB数据库实现API的增删改查功能,同时探讨如何通过JWT进行安全认证,确保数据传输的安全性。此外,文章还将简要介绍如何使用Swagger生成API文档,使得API的测试和维护更加便捷。无论你是希望提升现有项目的API设计,还是想从零开始构建一个新项目,本文都将为你提供一条清晰的道路
|
1月前
|
JavaScript 前端开发 API
JavaScript循环遍历常用的7种方法以及常用的数组 API
JavaScript循环遍历常用的7种方法以及常用的数组 API
35 0
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express构建RESTful API
使用Node.js和Express构建RESTful API
19 0
|
2月前
|
NoSQL JavaScript 前端开发
深入浅出:使用Node.js和MongoDB构建RESTful API
在当今的软件开发领域,构建高效、可扩展的Web服务已成为开发者的重要任务之一。本文将引导读者通过现代JavaScript环境——Node.js,搭配流行的NoSQL数据库MongoDB,一步步构建一个RESTful API。不同于常规的摘要,我们将采用故事化的方式,通过一个虚构的应用“BookFinder”的开发旅程,带领读者理解API设计、数据库交互及安全性考量等关键知识点。无论你是前端工程师希望深化后端知识,还是后端新手寻求实践机会,本文都将提供你所需的指南和启示。
|
3月前
|
Web App开发 Rust JavaScript
Rust 笔记:WebAssembly 的 JavaScript API
Rust 笔记:WebAssembly 的 JavaScript API
93 0
|
3月前
|
JavaScript 前端开发 程序员
Js中一些数组常用API总结
Js中一些数组常用API总结