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线程基础上加上消息循环来实现的,在这个消息 ...
随机推荐
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- 前端学Markdown
前面的话 我个人理解,Markdown就是一个富文本编辑器语言,类似于sass对于css的功能,Markdown也可以叫做HTML预处理器,只不过它是一门轻量级的标记语言,可以更简单的实现HTML ...
- 如何在网页中提取Email地址
开博好久了,今天第一次发表技术文档,之前总是将一些好的事例保存在电脑,时间久了找起来也很麻烦,所以还是放在博客里进行归类比较方便,这样也能将自己在学习过程中的一些心得体会分享给大家,也能给需要的人一点 ...
- js学习之类型识别
用来判别类型的方法有好多,整理了一下4种方法,平时用的时候,在不同情景下,还是要结合着使用的. 方法一 typeof:可以识别标准类型,除了Null:不能识别具体的对象类型,除了Function &l ...
- continue break 区别
在循环中有两种循环方式 continue , break continue 只是跳出本次循环, 不在继续往下走, 还是开始下一次循环 break 将会跳出整个循环, 此循环将会被终止 count = ...
- Unicode 和 UTF-8 有何区别?
Unicode符号范围 (一个字符两个字节) | UTF-8编码方式 (十六进制) | (二进制) —————————————————————– 这儿有四个字节从-----00 00 ...
- Block解析(iOS)
1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...
- 初识npm
一.npm简介: npm全称为Node Package Manager,是一个基于Node.js的包管理器,也是整个Node.js社区最流行.支持的第三方模块最多的包管理器. npm的初衷:JavaS ...
- linux中kvm的安装及快照管理
一.kvm的安装及状态查看 1.安装软件 yum -y install kvm virt-manager libvirt2.启动libvirtd 报错,升级device-mapper-libs yum ...
- AutoMapper使用中的问题
指定值只会执行一次 public class MomanBaseProfile : Profile { public MomanBaseProfile() { CreateMap<Request ...