问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

html5的filereader是怎么啦

发布网友 发布时间:2022-04-20 00:53

我来回答

2个回答

懂视网 时间:2022-04-20 05:15

[导读] HTML5拖拽的数据传输  虽然通过dragstart、drag和dragend事件实现了原生拖拽。但是这仅仅是拖拽,在IE6和IE7中还是有些拖拽问题,并且也没有实现数据的交换。为了实现数据的交换,IE5引入了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') ); 
     
     }; 
     
    };

热心网友 时间:2022-04-20 02:23

使用FileReader对象,web应用程序可以异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要处理的文件或数据.其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后的返回结果.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
不喜欢参加聚会怎么办 ...的电信8兆的宽带是169元每月可是用了2天就停机了,他说第一个月... 电信8兆宽带多少钱 爸妈想换5G套餐有没有那种可以绑定宽带一起的? ...换了波箱油后加速转速变高且偶有空转是怎么回事? 苦菜花的花语和寓意是什么? 苦菜花的花语是什么? 安徽省人事档案查询,调档等网上操作指南 安徽哪个网站调档 宽带10M与100M有什么区别啊?宽带10M和100M与平板电脑4G卡的用法用量有... 每月流量使用多,有没有可以推荐的大流量包? 汉堡包对牙齿有好处还是有坏处 想换个联通流量包有推荐嘛? 有什么推荐的流量包吗,就今天用? 你会做汉堡包吗? 麦当劳哪款汉堡好吃 蜜汁鸭腿汉堡——BigHamburger是怎么做的 我想办个流量包今天使用,有什么推荐的流量日包吗? 我想办个流量包今天使用,有什么推荐的流量日包的么? 汉堡为什么是垃圾食品 语音编解码的721 2020云南613楚雄教师专项招聘考试缴费方式有哪些? 语音编解码的GIPS 语音编解码的PCMA(G.711A) 语音编解码的MPEG-1 audio layer 1 语音编解码的NICAM 613教师专项招聘考试全部是客观题吗? 语音编解码的729A 汉堡店一般到几点就下班了 梦见很多蝎子爬到自己身上象征着什么?女人梦见满身爬着蝎子是什么预兆 手机经常用来看视频的,有什么流量包可以推荐办理呢? 我套餐里面的流量不够用,有什么流量包推荐的吗? 流量包都有那些? 可以推荐一个好用的移动流量包吗? 每天看斗鱼直播流量不够用了,有啥好的联通流量包套餐可以推荐吗? 国内云服务器价格哪家有优势? 索尼SONY音响是哪个国家生产的? 国内买的索尼音响是来自日本还是国内生产的? 27寸2560X1440分辨率的显示器配GTX670&nbsp;4G版的好还是GTX&nbsp;680&nbsp;2G版的好? 免费pdf转换成word哪款好 怎么用ps把照片弄成星形 想贷款买车,有社保卡,正常利息一般是多少厘 风云2七武器这个游戏怎么样? 我的风云2七武器游戏怎么存不了档啊?是怎么回事? 游戏 风云2之七武器 风云2七武器怎么样?什么类型的?情节画面怎呢样? 最好推荐一个不是回合制的单机rpg游戏 风云2七武器游戏里,第八回&quot;捕风&quot;一开始,聂风如何从天下会回到南安镇不夜坊? 风云2之七武器第一关怎么打过? ztree 如何获得datatransfer,请问ztree是如何实现拖拽功能的,是借助于html5吗? 人老了牙齿为什么会掉