iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >HTML5中dataTransfer对象的示例分析
  • 326
分享到

HTML5中dataTransfer对象的示例分析

2024-04-02 19:04:59 326人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关HTML5中dataTransfer对象的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。html5拖拽的数据传输  虽然通过drags

这篇文章将为大家详细讲解有关HTML5中dataTransfer对象的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

html5拖拽的数据传输

  虽然通过dragstart、drag和dragend事件实现了原生拖拽。但是这仅仅是拖拽,在IE6和IE7中还是有些拖拽问题,并且也没有实现数据的交换。为了实现数据的交换,IE5引入了dataTransfer对象。dataTransfer对象是事件对象的一个属性,用于从被拖拽元素相放置目标传递字符串格式的数据。因为它是事件对象的属性,所以只能在拖放事件的事件处理程序中访问dataTransfer对象。在事件处理程序中,可以使用这个对象的属性和方法来完善拖放功能。

  dataTransfer对象有两个主要的方法:getData()方法和setData()方法。从这两个方法的英文字面意思上就能大概猜出来其用途。getData()方法可以取得由setData()方法保存的值。setData()方法的第一个参数,也是getData()方法唯一的一个参数,是用来保存数据类型的字符串,取值是”text”或”URL”。

  IE只定义了”text”或”URL”两种有效的数据类型,而HTML5则对此加以扩展,允许指定各种MIME类型。考虑到向后兼容,HTML5也支持”text”或”URL”,但这两种类型会被映射为”text/plain”或”text/url-list”。

  实际上,dataTransfer对象可以为每种MIME类型都保存一个值。也就是说同事在这个对象中保存一段文本和一个URL不会有其他问题。不过,保存在dataTransfer对象中的数据只能在drop事件处理程序中读取。如果在ondrop处理程序中没有读取数据,那就是dataTransfer对象已经被销毁,数据也就随之丢失了。

  在拖动文本框中的文本时,浏览器会调用setData()方法,将拖动的文本以”text”格式保存在dataTransfer对象中。类似地,在拖放链接或图像时,会调用setData()方法并保存URL。然后,在这些元素被拖放到放置目标时,就可以通过getData()方法读到这些数据。当然,作为开发人员,你也可以通过dragstart事件处理程序中调用setData(),手工保存自己要传输的数据,以便将来使用。

  将数据保存在文本和保存为URL是有区别的。如果将数据保存为文本格式,那么数据不会得到任何特殊处理。如果保存为URL格式,浏览器会将其当成网页中的链接。如果你将这个URL放置到另一个浏览器窗口中,就可以打开该URL。

  Firefox 5及之前版本是不能将”url”和”text”映射为””和”text/plain”。但是却能把”Text”(T大写)映射为”text/plain”。为了更好地在跨浏览器的情况下从dataTransfer对象取得数据,最好在取得URL数据时检测两个值,而在取得文本数据时使用”Text”。

  注意,一定要把短数据类型放在前面,因为IE10及之前的版本仍然不支持扩展的MIME类型名,而它们在遇到无法识别的数据类型时,会报错。不过”text”或”URL”取值只有IE是强制的,在火狐3.6+、Chrome和Opera中设置其他任意值的字符串也能正常执行。

  dropEffect属性和effectAllowed属性

  运用dataTransfer对象,不仅仅能传输数据,还能通过dataTransfer对象确定被拖拽的元素以及作为放置目标的元素能够接收什么操作。要实现这样的功能就用到了dropEffect属性和effectAllowed属性。

  dropEffect属性

  其中,通过dropEffect属性可以知道被拖动的元素能够执行哪种行为。这个属性的四个值如下:

  none:不能把拖动的元素放在这里。这是除了文本框之外所有元素默认的值。

  move:应该把拖动的元素移动到放置目标。

  copy:应该把拖动的元素复制到放置目标。

  link:放置目标会打开拖动的元素(但拖动的元素必须是个链接,有URL地址)。

  把元素拖动到放置目标上的时候,以上每一个值都会导致光标显示为不同的符号。

  effectAllowed属性

  光有dropEffect属性是不咋管用的。只有结合effectAllowed属性一起使用才能发挥功效。effectAllowed属性表示允许拖动元素的哪种行为(dropEffect)。effectAllowed属性也有很多值,其值如下:

  uninitialized:没有给被拖动元素设置任何放置行为。

  none:被拖动的元素不能有任何行为。

  copy:只允许值为”copy”的dropEffect。

  link:只允许值为”link”的dropEffect。

  move:只允许值为”move”的dropEffect。

  copyLink:允许值为”copy”和”link”的dropEffect。

  copyMove:允许值为”copy”和”move”的dropEffect。

  linkMove:允许值为”link”和”move”的dropEffect。

  all:允许任意dropEffect。

  要设置effectAllowed属性必须在ondragstart事件处理程序中设置。小例子如下

  HTML代码

[html] view plaincopyprint?

<ul>  
    <li draggable="true">梦龙小站</li>  
    <li draggable="true">梦龙小站</li>  
    <li draggable="true">梦龙小站</li>  
</ul>  
<a href="Http://www.baidu.com/">梦龙小站</a>  
<p id="p1">梦龙小站</p>

  CSS代码

[css] view plaincopyprint?

li{ width:100px; height:30px; border:1px #000000 solid; margin:20px; list-style:none;}  
#p1{ width:100px; height:100px; background:red; margin:300px;}

  javascript代码

  1. [javascript] view plaincopyprint?
    
    //dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的  
    //拖动不带链接的li,会起作用但不跳转链接  
    //拖动带连接的a,会起作用也跳转  
      
    window.onload = function(){  
        var aLi = document.getElementsByTagName('li');  
        var aA = document.getElementsByTagName('a');  
        var op = document.getElementById('p1');  
          
        for(var i=0;i<aLi.length;i++){  
          
            aLi[i].ondragstart = function(ev){ //拖拽前触发  
              
                this.style.background = 'yellow';  
                  
                ev.dataTransfer.setData('a','hello');  //存储一个键值对 : value值必须是字符串  
                  
                ev.dataTransfer.effectAllowed = 'all';  
                  
                ev.dataTransfer.setDragImage(this,0,0);  
              
            };  
              
            aLi[i].ondragend = function(){  //拖拽结束触发  
              
                this.style.background = '';  
              
            };  
        }  
        for(var i=0;i<aA.length;i++){  
          
            aA[i].ondragstart = function(ev){ //拖拽前触发  
              
                this.style.background = 'yellow';  
                  
                ev.dataTransfer.setData('a','hello');  //存储一个键值对 : value值必须是字符串  
                  
                ev.dataTransfer.effectAllowed = 'link';  
                  
                ev.dataTransfer.setDragImage(this,0,0);  
              
            };  
              
            aA[i].ondragend = function(){  //拖拽结束触发  
              
                this.style.background = '';  
              
            };  
        }  
          
        op.ondragenter = function(){  //相当于onmouseover  
              
            this.style.background = 'green';  
              
        };  
          
        op.ondragleave = function(){  //相当于onmouseout  
              
            this.style.background = 'red';  
              
        };  
          
        op.ondraGover = function(ev){ //进入目标、离开目标之间,连续触发  
              
            ev.preventDefault();  //阻止默认事件:元素就可以释放了  
              
            ev.dataTransfer.dropEffect = 'link';  //真对外部文件  
              
        };  
          
        op.ondrop = function(ev){  //释放鼠标的时候触发  
          
            this.style.background = 'red';    
          
            alert( ev.dataTransfer.getData('a') );  
          
        };  
          
    };

关于“HTML5中dataTransfer对象的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: HTML5中dataTransfer对象的示例分析

本文链接: https://www.lsjlt.com/news/80860.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HTML5中dataTransfer对象的示例分析
    这篇文章将为大家详细讲解有关HTML5中dataTransfer对象的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。HTML5拖拽的数据传输  虽然通过drags...
    99+
    2024-04-02
  • AJAX中XMLHttpRequest对象的示例分析
    这篇文章主要介绍AJAX中XMLHttpRequest对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!AJAX是一种创建交互式网页应用的网页开发技术,是异步Javascr...
    99+
    2024-04-02
  • Angular中$injector对象的示例分析
    这篇文章给大家分享的是有关Angular中$injector对象的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。$injector其实是一个IOC容器,包含了很多我们通过.module()和$provid...
    99+
    2023-06-15
  • javascript中History对象的示例分析
    这篇文章主要为大家展示了“javascript中History对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中History对...
    99+
    2024-04-02
  • jspXCMS中Page对象的示例分析
    这篇文章主要为大家展示了“jspXCMS中Page对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jspXCMS中Page对象的示例分析”这篇文章吧。分页对象。由spring-dat...
    99+
    2023-06-26
  • javascript中Date对象的示例分析
    小编给大家分享一下javascript中Date对象的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MDN官网介绍set...
    99+
    2024-04-02
  • ECMAScript6中Class对象的示例分析
    这篇文章主要为大家展示了“ECMAScript6中Class对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ECMAScript6中Class对象的...
    99+
    2024-04-02
  • JavaScript对象的示例分析
    这篇文章将为大家详细讲解有关JavaScript对象的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、构造函数为什么使用构造函数什么是构造函数:是JavaScr...
    99+
    2024-04-02
  • VB.NET对象的示例分析
    这篇文章主要介绍了VB.NET对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对象的生命周期在VB 6中,对象有一个很清楚的定义以及很容易理解的生命周期的概念,对...
    99+
    2023-06-17
  • ES6中Math对象的示例分析
    这篇文章主要为大家展示了“ES6中Math对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ES6中Math对象的示例分析”这篇文章吧。1、Math....
    99+
    2024-04-02
  • JS中Object对象的示例分析
    小编给大家分享一下JS中Object对象的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!对象概念在 javascript...
    99+
    2024-04-02
  • ajax中XHR对象的示例分析
    这篇文章主要介绍了ajax中XHR对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 创建  ajax技术的核心是XML...
    99+
    2024-04-02
  • Scala对象的示例分析
    这篇文章主要介绍Scala对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Scala作为一个纯面向对象的语言,于是在Scala中万物皆对象,包括数字和函数。在这方面,Scala于Java存在很大不同:Ja...
    99+
    2023-06-17
  • Java中类与对象的示例分析
    这篇文章主要介绍Java中类与对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!类和对象在面向对象中,类和对象是最基本、最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象。对象就是表示一...
    99+
    2023-06-20
  • C++中类与对象的示例分析
    这篇文章将为大家详细讲解有关C++中类与对象的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:C 语言是面向过程的,关注的是过程,分析出求解的步骤,通过函数逐步调用解决问题。C++是基于面向对...
    99+
    2023-06-22
  • Java中类和对象的示例分析
    这篇文章主要介绍了Java中类和对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。类可以看成是创建Java对象的模板1、类的定义public class&...
    99+
    2023-06-25
  • C++中对象排序的示例分析
    这篇文章主要介绍C++中对象排序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.对象比较介绍在排序中进行交换的前提主要是进行对象间的 比较、而常见的排序是对一个数组排序,然后对每个数组内容进行比...
    99+
    2023-06-29
  • Python面向对象中类和对象的示例分析
    这篇文章主要介绍了Python面向对象中类和对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是面向对象编程?我们是不是听过面向过程,拿来放在一起对比就比较好理...
    99+
    2023-06-22
  • JavaScript中数组对象的示例分析
    这篇文章主要为大家展示了“JavaScript中数组对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中数组对象的示例分析”这篇文...
    99+
    2024-04-02
  • JavaScript中代理对象的示例分析
    这篇文章主要介绍JavaScript中代理对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JavaScript 支持 setters 和 getters 已经很长时间了。他们用带有 set 和 get &...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作