HTML5_06之拖放API、Worker线程、Storage存储
1、拖放API中源对象与目标对象事件间的数据传递:
①创建全局变量——污染全局对象:
var 全局变量=null;
src.ondragstart=function(){
全局变量=数据值;
}
target.ondrop=function(){
console.log(全局变量);
}
②使用HTML5中拖放API提供的dataTransfer对象:
源对象事件的dataTransfer与目标对象事件的dataTransfer不是同一个对象,但可相互传递数据;
src.ondragstart=function(e){
e.dataTransfer.setData('key','value');
}
target.ondrop=function(e){
//读取数据传递对象中得到的数据
var data=e.dataTransfer.getData('key');
}
HTML5标准中dataTransfer对象可以保存的数据必须有key,key只能叫“text/html”或“text/uri-list”或“Files”;
2、拖放客户端本地图片到网页中显示:
客户端图片文件为拖放源对象,网页中的元素是拖放目标对象;
container.ondrop=function(e){
var f0=e.dataTransfer.files[0];//File对象
var fr=new FileReader();//读取文件中的内容
fr.readAsDataURL(0);//把图片作为dataURL来读取
fr.onload=function(){//文件读取完成
var img=new Image();//创建Image元素
img.src=fr.result;//dataURL
container.appendChild(img);
}
}
HTML5中新增文件读取相关对象:
File——代表一个文件;FileList——代表一个文件列表;FileReader——用于读取一个文件中的内容;FileWriter——用于向一个文件中写出内容;
3、HTML5新特性——Web Worker:
①由于负责渲染/监听的只有一个UI主线程,所有HTML/CSS/JS的执行都在这一个线程内,若页面加载了非常耗时(算法复杂)的JS操作,会阻塞后续的HTMl/CSS/JS渲染和事件监听,所以需要一个类似于创建新线程地方法(JS没有创建新线程的方法):
var w=new Work('xx.js');
在当前UI主线程中创建并启动一个新的并发的工作线程该线程耗时操作,可能阻塞,但不会影响UI主线程;
②Worker线程的致命问题:不能执行任何DOM操作,不能使用任何DOM或BOM元素——浏览器只允许UI主线程修改DOM树;
③让UI主线程给Worker线程传递数据:
UI主线程:
var w=new Work('xx.js');
w.postMessage('data');
Worker线程:
onmessage=function(event){
var data=event.data;
}
④让Worker线程把运算结果传递给UI主线程:
Worker线程:
postMessage('data');
UI主线程:
var w=new Worker('xx.js');
w.onmessage=function(event){
var data=event.data;
}
⑤Worker用于执行耗时的JS任务,在一个独立的线程中,可以避免UI主线程的阻塞问题;
4、HTML5新特性——WebStorage:
①Web客户端存储技术:
Cookie:兼容性好,但操作繁琐,数据长度限制(4KB);
Flash:大小没有限制,但依赖于Flash环境;
Web Storage:大小可达8MB,操作简单,但属于HTML5新特性;
IndexeedDB:大小没有限制,使用JS操作的一种客户端数据库,但操作稍显复杂;
②Web Storage新对象之window.sessionStorage:
会话级存储,其中的数据可以在一次会话中的多个页面中共享——数据存储在浏览器进程内存中;
sessionStorage.setItem(key,value);
var value=sessionStorage.getItem(key);
sessionStorage.removeItem(key);
sessionStorage.clear();
sessionStorage.key(i);
sessionStorage.length;
③Web Storage新对象之window.localStorage:
跨会话级存储(本地存储),其中数据即使再关闭浏览器/电脑,下次仍可以访问——数据存储在文件系统的磁盘文件中;
localStorage.setItem(key,value);
var value=localStorage.getItem(key);
localStorage.removeItem(key);
localStorage.clear();
localStorage.key(i);
localStorage.length;
④如果localStorage中的数据发生了改变,所有已打开的当前网站的浏览器窗口,都会触发window.onstorage事件,从而得到本地存储数据已被修改;
HTML5_06之拖放API、Worker线程、Storage存储的更多相关文章
- Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic
Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic 1.1. ThreadLocal 设计模式1 1.2. ...
- 线程本地存储(Thread Local Storage, TLS)简单分析与使用
在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 那么如果一个变量不想使多个线程共享访问, 那么该怎么办呢? 呵呵, 这个办法就是TLS ...
- 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理
原文链接地址:http://www.cppblog.com/Tim/archive/2012/07/04/181018.html 本文为线程本地存储TLS系列之分类和原理. 一.TLS简述和分类 我们 ...
- 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理
本文为线程本地存储TLS系列之分类和原理. 一.TLS简述和分类 我们知道在一个进程中,所有线程是共享同一个地址空间的.所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线 ...
- Netty服务端接收的新连接是如何绑定到worker线程池的?
更多技术分享可关注我 前言 原文:Netty服务端接收的新连接是如何绑定到worker线程池的? 前面分析Netty服务端检测新连接的过程提到了NioServerSocketChannel读完新连接后 ...
- html5的新特性——拖放API
在HTML5之前只能使用鼠标事件模拟出"拖放"效果:HTML5专门为拖放提供了7个事件句柄. 被拖动的源对象可以触发的事件: (1)ondragstart:源对象开始被拖动 (2 ...
- 拖放API
拖放功能是电脑用户认为理所应当能够“顺畅运行”的功能,我们有数种方法在浏览器中启用此功能.Windows Internet Explorer 9 和早期版本的 Windows Internet Exp ...
- 模板应用--UI线程与worker线程同步 模仿c# invoke
由之前的一篇博文 <UI线程与worker线程><UI线程与worker线程>引出,UI线程与worker线程“串行化”在win32上实现是多么没有节操的事情,代码编写麻烦不说 ...
- UI线程与worker线程
也谈谈我对UI线程和worker线程的理解 UI线程又叫界面线程,能够响应操作系统的特定消息,包括界面消息.鼠标键盘消息.自定义消息等,是在普通的worker线程基础上加上消息循环来实现的,在这个消息 ...
随机推荐
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm ...
- 【转】39个让你受益的HTML5教程
闲话少说,本文作者为大家收集了网上学习HTML5的资源,期望它们可以帮助大家更好地学习HTML5. 好人啊! 不过,作者原来说的40个只有39个,因为第5个和第8个是重复的. 原文在此! 1. 五分钟 ...
- 步入angularjs directive(指令)--准备工作熟悉hasOwnProperty
在讲解directive之前,先做一下准备工作,为何要这样呢? 因为我们不是简单的说说directive怎么用,还要知道为什么这么用!(今天我们先磨磨刀!). 首先我们讲讲js 基础的知识--hasO ...
- 神技!微信小程序(应用号)抢先入门教程(附最新案例DEMO-豆瓣电影)持续更新
微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...
- psoc学习
第一是:项目的路径需要放在Documents and Settings\,也就是默认的文件夹的地方,不然会报错错误范例为:Question:CY8CKIT-023 kit example projec ...
- ES6之变量常量字符串数值
ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...
- iOS从零开始学习直播之2.采集
直播的采集由采集的设备(摄像头.话筒)不同分为视频采集和音频采集,本篇文章会分别介绍. 1.采集步骤 1.创建捕捉会话(AVCaptureSession),iOS调用相机和话筒之前都需要创建捕 ...
- Linux网络属性配置
目录 IP地址分类 如何将Linux主机接入到网络中 网络接口的命名方式 ifcfg系列命令 如何配置主机名 如何配置DNS服务器指向 iproute2系列命令 Linux管理网络服务 永久生效配置路 ...
- 不得不知的CLR中的GC
引言 GC 作为CLR的垃圾回收器,让程序员可以把更多的关注度放在业务上而不是垃圾回收(内存回收)上.其实很多语言也有类似的东东, 如Java也有JIT 等等 GC基本概念 垃圾回收机制的算法有好多种 ...