新增API
语义: 能够让你更恰当地描述你的内容是什么。
连通性: 能够让你和服务器之间通过创新的新技术方法进行通信(web sockets等)。
离线 & 存储:能够让网页在客户端本地存储数据以及更高效地离线运行(离线资源、在线和离线事件、DOM存储、IndexDB、自web应用程序中使用文件[FileReader])。
多媒体:使 video 和 audio 成为了在所有 Web 中的一等公民。
2D/3D 绘图 & 效果:提供了一个更加分化范围的呈现选择(canvas、webGL)。
性能 & 集成:提供了非常显著的性能优化和更有效的计算机硬件使用(WebWorkers、XMLHttpRequest2、HistoryAPI、拖放、requestAnimationFrame、全屏API、指针锁定API、在线和离线事件)。
设备访问 Device Access:能够处理各种输入和输出设备(触控事件touch、使用地理位置定位、检测设备方向)。
语义元素
<section></section> 包含了一组内容及其标题。
<article></article> 定义独立的内容
<nav></nav> 定义导航链接部分区域
<aside></aside>标签定义页面主区域内容之外的内容,与主区域的内容相关;侧边栏
<header></header>
<footer></footer>
表引入外部内容
<blockquote>块引用</blockquote>
<details></details>
<fieldset>字段集</fieldset>
<cite>引例</cite>
<address></address>作者地址元素
<time></time>
<data value='433322'></data>将一个指定内容和机器可读的翻译联系在一起。value指定元素内容对应的机器可读的翻译
<figure>img<figcaption>元素代表一段独立的内容,经常与说明caption配合使用</figcaption></figure> figcaption定义figure的标题
<mark></mark>元素 突出显示的文本通常和当前用户活动具有某种关联性,而<strong></strong>用来表示文本在上下文中的重要性
<progress value='70' max='100'>70%</progess>进度条
对于不支持HTML5的浏览器,默认为inline;只需另为定义一下section,article,aside,footer,header,nav,hgroup{display:block;};2还需要引入goole的html5shiv.js
如果禁用脚本:则加上noscript标签
嵌入媒体:<audio controls></audio>、<video></video>
属性:src=url
controls:显示标准的HTML5控制器
autoplay:是音频自动播放
loop:音频重复循环播放
preload='auto' 表缓冲文件的属性,其值有:none不缓冲;auto缓冲音频文件;metadata缓冲文件的元数据
<source src='' type=''>来指定多个文件,为不同浏览器提供可支持的编码格式<video><source src='' type='video/ogg'...><source type='video/mp4' ...></video>
js操作媒体var v=document.getElementByTagName('video')[0];
v.play(); v.pause(); v.volume+=0.1; v.volume-=0.1;
终止媒体下载:v.pause();v.src=''; or v.removeAttribute('src');
在媒体中查找:v.seekable.start();返回开始时间
v.seekable.end();返回结束时间
v.currentTime = 122;设定在122s
v.played.end(); 返回浏览器播放的秒数
v.muted;是否静音,默认为false,表示有声音
arc='..../...#20,50' 默认从20s 到50s;02:30:00
v.networkState 检测加载的媒体
<track>元素被当作媒体元素audio video 的子元素来使用,允许指定计时字幕,如自动处理字幕/
表单元素<input>type特性
search:会自动取掉换行符
tel:可加pattern maxlength限制输入的值
url
新增属性 <input list='brower'> <datalist id='brower'><option value='v1'><option value='v2'></datalist>
pattern 正则表达式
form 定义该input属于那个<form>元素的
formmethord:覆盖get post
formnovalidate 该input不验证
<form>元素新特性:novalidate:设置了该特性不会再表单提交之前进行验证
<datalist><output>
placeholder autofocus
web存储:
web存储的主要目的:提供一种在cookie之外存储会话数据的途径;提供一种存储大量可以跨会话存在的数据机制。
localStorage和sessionStorage对象都是以windows对象属性的形式存在的
localStorage 对象存储的数据没有时间限制 localStorage.lastname="Smith";localStorage.lastname;持久保存客户端文档或用户偏好设置。
sessionStorage 方法针对一个session进行数据存储,当用户关闭浏览器窗口时,数据会被删除,针对小段数据的存储。
setItem()直接设置新的属性来存储数据
//无法解析sessionStorage.begin();//确保在这段代码执行的时候不会发生其他磁盘写入操作
//使用sessionStorage方法存储数据
sessionStorage.setItem('name','Nicholas');
//使用属性存储数据
sessionStorage.book = 'Profession JavaScript';
//无法解析sessionStorage.commit(); 在所有设置完成后调用commit()方法
getItem()或者通过直接访问属性名来获取数据。
//使用方法读取数据
var name = sessionStorage.getItem('name');
//使用属性读取数据
var book = sessionStorage.book;
删除数据可以使用delete操作符删除对象属性,也可以调用removeItem()方法
delete sessionStorage.name;
sessionStorge.removeItem('book')
length属性、key()方法 迭代sessionStorage的值
for (var i = 0,len=sessionStorage.length;i<len;i++){ var key = sessionStorage.key(i); var value = sessionStorage.getItem(key); alert(key + "=" +value) }
清除所有数据:localStorage.clear()
localStorage规定:要访问同一个localStorage对象,页面必须来自于同一个域名,使用同一种协议,在同一个端口。
//使用方法存储数据 localStorage.setItem('name','Nichoalas'); //使用属性存储数据 localStorage.book = 'Professional JavaScript'; //使用方法读取数据 var name = localStorage.getItem('name') //使用属性读取数据 var book = localStorage.book;
开启离线缓存:<html manifest="demo.appcache">
File API
<input type='file' id='input' muliple>
获取文件:var selfile = document.getElementById('input').files[0];
属性:selfiles.length 选了几个文件
单独文件:
再选择一个或多个文件时,files集合中将包含一组File对象,每个File对象对应着一个文件,每个File对象都有下列只读属性:
name:本地文件系统的文件名
size:文件的字节大小
type:字符串,文件的MIME类型。
lastModifiedDate:字符串,文件上一次被修改的事件(chrome)
拖拽 拖放drag drop
dragstart:要被拖拽的元素开始拖拽时触发,这个事件对象是被拖拽元素。
drag:拖拽元素时触发,这个事件对象是被拖拽元素。
dragenter:拖拽元素进入目标元素时触发,这个事件对象是目标元素。
dragover:拖拽某元素在目标元素上移动时触发,这个事件对象是目标元素。
dragleave:拖拽某元素离开目标元素时触发,这个事件对象是目标元素。
drop:将被拖拽元素放在目标元素内时触发,这个事件对象是目标元素。
dragend:在drop之后触发,就是拖拽完毕时触发,这个事件对象是被拖拽元素。
<div id='div1' ondrop='drop(event)' ondragover='allowDrop(event)'> </div> <img id='drag1' src='' draggable='true' ondragstart='drag(event)' /> <script> function allowDrop(ev){ev.preventDefault();} function drag(ev){ev.dataTransfer.setData('Text',ev.target.id);} function drop(ev){ev.preventDefault(); //通过利用dataTransfer对象传递 var data=ev.dataTransfer.getData('Text'); ev.target.appendChild(document.getElementById(data));} </script>
读取文件FileReader:
使用FileReader对象,web应用程序可以异步的读取存储在用户计算机上的文件,可以使用Blob或File对象来指定所要处理的文件或数据
var reader = new FileReader();
var reader = new FileReader(); reader.onload = function(ofile){ document.getElementById('preview').src = ofile.target.result; }; function loadImageFile(){ var oFile = document.getElementById('uploadImage').files[0]; reader.readAsDataURL(oFile); }
方法: abort(); 终止读取文件
readAsArrayBuffer();
readAsBinaryString();
readAsDataURL();
readAsText();
状态常量: EMPTY 0; LOADING 1; DONE 2;
属性:error ; readyState ; result ;
Canvas:
是一个可以使用js在一个会版上(html元素)绘制图形。
<canvas id="clock" width="150" height="150"> <img src="images/clock.png" width="150" height="150" alt=""/> //canvas中间的内容为替换内容 </canvas>
方法:getContext('2D');获得上下文和他的绘画功能
var canvas = document.getElementById('canvas'); if(canvas.getContext){ var ctx = canvas.getContext('2d'); ctx.fillStyle = 'rgb(200,0,0); ctx.fillRect(10,10,55,50); //绘制矩形 ctx.fillStyle = 'rgb(0,0,200,0.3); ctx.fillRect(30,30,55,50);
//绘制路径
ctx.beginPath();
ctx.moveTo(75,50);
ctx.lineTo(100,75);
ctx.lineTo(100,25);
ctx.fill();
绘制文字
ctx.font = '46px serif';
ctx.fillText('Hello world',10,50);
var img = new Image();
img.src = 'myImage.png'; 设置图片源地址
canvas提供三种方法绘制矩形:
ctx.fillRect(x,y,width,height): 绘制一个填充的矩形
.strokeRect(x,y,width,height): 绘制一个矩形的边框
.clearRect(x,y,width,height): 清除指定矩形区域,让清楚部分完全透明
绘制路径
.beginPath()
.closePath()
.stroke()通过线条绘制图形轮廓;
.fill()通过填充路径的内容区域生成实心的剧图形
绘制圆弧
.arc(x,y,radius,startAngle,endAngle,anticlockwise)画一个以x,y为圆心,radius为半径,从startAngle开始,endAngle结束,顺时针false
.arcTo(x1,y1,x2,y2,radius)根据给定的控制点和半径画一段圆弧,再以直线链接两个控制点
绘制文本
.fillText(text,x,y [,maxWidth])
.strokeText(text,x,y [,maxWidth])
绘制图片
drawImage(image, x, y)
其中 image
是 image 或者 canvas 对象,x
和 y 是其在目标 canvas 里的起始坐标
.moveTo(x,y)移动笔触
.lineTo(x,y)绘制直线
.fillStyle = color
.strokeStyle = color
worker接口会生成真正的操作系统级别的线程;可以向由他的创建者指定的时间监听函数传递消息,这样worker生成的所有的任务都会接受到这些消息。js属于单线程环境,无法同时运行多个脚本,web Worker可以一次生成多个线程用于长时间运行任务
var myWorker = new Worker('my_task.js');
myWorker.postMessage('ali'); html页面向worker发送消息
myWorker.onmessage = function(oEvent){oEvent.data}; html监听worker发来的数据
myWorker.terminate(); self.close(); work线程立即被杀死,不会留下任何机会让它完成自己的操作或清理工作。
//echo.js onmessage = function(e){ postMessage('echo:' + e.data); //向页面发送消息 } //html页面 <script> if (typeof (Worker) != 'undefined') { var worker = new Worker('echo.js'); worker.postMessage('text.value); worker.onmessage = function(e){e.data}; } </script>
webSocket
引入webSocket协议,因为http协议是单线程的,只允许Browser向webServer发送请求资源后才能返回相应的数据。。但要想开发一个基于web的应用程序去获取服务器的实时数据,例如股票的行情,需要客户端与服务器端反复通信,不断发送请求,浪费带宽和CPU利用率。而websocket是在Browser的新网络协议,能支持客户端的服务器端的双向通信。
webSocket协议是一种双向通信协议,建立在TCP之上,同http一样通过TCP来传输数据,但不同点是1 WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动的向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议;2 webSocket需要通过握手连接,类似于TCP也需要客户端与服务器端进行三次握手连接,成功后才能进行相互通信。(在建立握手的过程,数据是通过http协议传输的)
webSocket API
var ws = new webSocket('ws://echo.websocket.org'); //实例化一个webSocket对象,连接到ws协议的服务器地址
ws.onopen = function(){ws.send('test');}; //建立连接成功后,触发onopen,发送消息,
ws.onmessage = function(evt){console.log(evt.data); ws.close();}; //客户端接收到服务器传来的数据data,然后请求关闭连接,触发onclose事件
ws.onclose = function(evt){console.log('webSocketClosed');};
ws.onerror = function(evt){console.log('webSocketError!);};
Geolocation API
地理定位通过 navigator.geolocation提供
方法1:获取当前位置 getCurrentPosition(); 接受三个参数,成功回调函数;可选失败回调函数;可选 选项对象。
成功回调函数,接受position对象参数,有coords和timestamp属性;coords对象又饱含的属性:
- latitude:以十进制度数表示的纬度。
- longitude:以十进制度数表示的经度。
- accuracy:经、纬度坐标的精度,以米为单位。有些浏览器还可能会在coords对象中提供如下属性。
- altitude:以米为单位的海拔高度,如果没有相关数据则值为null。
- altitudeAccuracy:海拔高度的精度,以米为单位,数值越大越不精确。
- heading:指南针的方向,0°表示正北,值为NaN表示没有检测到数据。
- speed:速度,每秒移动多少米,如果没有相关数据则为null。
navigator.geolocation.getCurrentPosition(function(position){ drawMapCenteredAt(position.coords.latitude, position.coords.longitude); }, function(error) { console.log("Error code: " + error.code); console.log("Error message: " + error.message); }, { enableHighAccuracy: true, //尽可能准确的位置信息 timeout: 5000, //等待信息的最长时间 maximumAge: 25000 //有效时间 });
方法2 跟踪用户的位置 watchPosition(),用法同上
var watchId = navigator.geolocation.watchPosition(function(position){ drawMapCenteredAt(position.coords.latitude, position.coords.longitude); }, function(error) { console.log("Error code: " + error.code); console.log("Error message: " + error.message); }); clearWatch(watchId); //取消监控操作
DOM节点操作QuerySelector
persent message
window.performance.timing 时间戳
可以跨域的请求AJAX
以前var xhr = XMLHttpRequest();
xhr.onreadystatechange = function(){}
xhr.open(url,'GET',false); //同域
xhr.send()
跨域:设置服务器的相应头:header('Access-Control-Allow-Origin:*或www.baidu.com,www.qq.com') //*允许所有雨都可以向此域发起请求
触摸事件:start mousedown mouseup mousemove click end
viewport固定整个页面宽度:<meta name='viewport' content='width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no'/>
移动端 性能陷阱:
1 减少或避免 repaint页面重绘,reflow页面回流
2 缓存可缓存的数据 HTML5之前:用http的response Headers做缓存;之后 localStorage.getItem()
3 使用CSS3 transform代替DOM操作
4 不要给 非static定位元素 增加CSS3动画 (如absolute relative元素)
5 适当使用硬件加速 如1 经canvas绘制 2给position:relative的元素,开启transform:translate3d(0,0,0);硬件加速,调动GPU作处理
移动端开发原则:轻量级、维护简单、快速开发、高性能。
Application Cache :
Manifest:<html manifest = "xxx.manifest">
特点:Manifest 文件有变化才更新
一次必须更新Manifest 中的所有文件 下次才生效
缺点:延迟 更新失败
<audio src="audio.mp3" preload="auto" controls autoplay loop></audio> //autoplay是音频自动播放,loop使音频自动重复播放,controls显示自动播放器
2.接口中定义播放:var v = document.getElementsByTagName('audio')[0]; v.play();播放 v.pause();暂停 v.volume+=0.1;加音量 v.volume-=0.1;减音量
特殊元素:
移动端:1,使用css3动画,使用gpu渲染,效率高 ;
2‘使用Canvas代替Image标签,触发gpu渲染;drawImage API:drawImage(image,x,y);drawImage(img,x,y,width,height);
3、加载Image使用Image()对象方法,var img = new Image(); img.onload = function(){}; img.src = "http....";可以动态获取其height等,以适用不同屏幕自适应。代替<image>标签。
框架:zepto.js 轻量级框架,类似jquery
touch事件:引入touch module
touchsatrt 、 touchmove 、 touchend 、 touchcancel、
touch in zepto.js:tapsingleTapdoubleTaplongTapswipeswipeLeftswipeRightswipeUpswipeDown;
CSS3动画:框架:--Animation.css
@keyframes XXX{0%:{}25%:{}...}
animation-name动画名称: XXX;
animation-duration持续时间:5s;
animation-delay执行延迟时间:2s;
animation-timing-function动画形变函数指定:linear;
animation-play-state播放状态指定:running;
animation-direcction:alternate;
动画事件:当动画之行结束时触发事件:webkitAnimationEnd()
window.history.back();
window.history.forward();
window.history.go(-1);
window.history.go(1);
window.history.length;
history.pushState(data,'',url)
history.onpopstate = function(){}