HTML5笔记-加强版

新增的语法结构表单验证

1、新的页面结构以及宽松的语法规范:
<!doctype html> 
<meta charset=“utf-8”/>

2、新的结构化元素:语义化标签:

<header></header> 页眉。主要用于页面的头部的信息介绍,也可用于板块头部

<hgroup></hgroup> 页面上的一个标题组合。一个标题和一个子标题,或者标语的组合 
<hgroup> 
<h1>妙味课堂</h1> 
<h2>带您进入富有人情味的IT培训</h2> 
</hgroup>

<nav></nav> 导航 (包含链接的的一个列表)比ul少了一些默认的局限性 
<nav><a href=“#”>链接</a><a href=“#”>链接</a></nav> 
<nav> 
<p><a href=“#”>首页</a></p> 
<p><a href=“#”>课堂</a></p> 
</nav>

<footer></footer>页脚 页面的底部 或者 版块底部

<section> <section> 页面上的版块。用于划分页面上的不同区域,或者划分文章里不同的节

<article></ article > 用来在页面中表示一套结构完整且独立的内容部分。可以用来呈现论坛的一个帖子,杂志或报纸中的一篇文章,一篇博客,用户提交的评论内容,可互动的页面模块挂件等。

<aside></ aside> 元素标签可以包含与当前页面或主要内容相关的引用、侧边栏、广告、nav元素组,以及其他类似的有别与主要内容的部分 
aside 的内容应该与 article 的内容相关: 
被包含在<article>中作为主要内容的附属信息部分,其中的内容 以是与当前文章有关的引用、词汇列表等 
在<article>之外使用,作为页面或站点全局的附属信息部分;最典型的形式是侧边栏(sidebar),其中的内容可以是友情链接、附属导航或广告单元等。

<figure> < figure > 用于对元素进行组合。一般用于图片或视频。

<figcaption> <figcaption> figure的子元素,用于对figure的内容进行说明。 
<figure> 
<img src=“miaov.png”/>(注意没有alt) 
<figcaption> 妙味课堂 photo ? 妙味趣学</figcaption> 
</figure>

<time></time>用来表现时间或日期 
<p> 我们在每天早上 <time>9:00</time> 开始营业。</p> 
<p> 我在 <time datetime="2008-02-14">情人节</time> 有个约会。 </p>

<datalist></datalist>选项列表。与 input 元素配合使用,来定义 input 可能的值。
当输入的时候,会出现下拉菜单,里面有可能的选项。当输入选项前几个字母会匹配含有的选项值。 
<input type="text" list="valList" /> 
<datalist id="valList"> 
<option value="javascript">javascript</option> 
<option value="html">html</option> 
<option value="css">css</option> 
</datalist>

<details></details>用于描述文档或文档某个部分的细节。该元素用于摘录引用等,应该与页面的主要内容区分开的其他内容 
属性: Open 进入页面时属性默认展开

< summary></summary> details 元素的标题 
<details> 
<summary>妙味课堂</summary> (显示) 
<p>国内将知名的IT培训机构</p> (隐藏) 
</details>

<dialog></dialog>定义一段对话 :
<dialog> 
<dt>老师</dt> 
<dd>2+2 等于?</dd> 
<dt>学生</dt> 
<dd>4</dd> 
<dt>老师</dt> 
<dd>答对了!</dd> 
</dialog>

<address></address> 定义文章 或页面作者的详细联系信息

<mark></mark> 需要标记的词或句子(字体的背景默认为黄色标记)

<keygen>给表单添加一个公钥 
<form action="http://www.baidu.com" method="get"> 
用户: <input type="text" name="usr_name" /> 
公钥: <keygen name="security" /> 
<input type="submit" /> 
</form>

<progress><progress>定义进度条 
<progress max="100" value="76"> 
<span>76</span>% 
</progress>

3、IE下的兼容

1)标签

针对IE6-8这些不支持HTML5语义化标签的浏览器我们可以使用javascript创建标签来解决他们
方法如下: 
在页面的头部加下: 
<script> 
document.createElement(“header”); 
document.createElement(“nav”); 
document.createElement(“footer”); 
…… 
</script>

2)样式

HTML5语义化标签在IE6-8下,我们用js创建出来之后,他是不会有任何默认样式的甚至是 display,所以在样式表里要对这些标签定义一下它默认的display,一般为display:block

3)直接引入兼容插件

4、表单forms

1)新的输入型控件:type=" "

email : 电子邮箱文本框,跟普通的没什么区别。当输入不是邮箱的时候,验证通不过。移动端的键盘会有变化。 
tel : 电话号码 
url : 网页的URL 
search : 搜索引擎。chrome下输入文字后,会多出一个关闭的X 
range : 特定范围内的数值选择器。属性:min、max、step( 步数 ) 
number : 只能包含数字的输入框 
color : 颜色选择器 
datetime : 显示完整日期(UTC) 
datetime-local : 显示完整日期,不含时区 
time : 显示时间,不含时区 
date : 显示日期 
week : 显示周 
month : 显示月

2)新的表单属性

placeholder : 输入框提示信息 
autocomplete : 是否保存用户输入值,下次输入显示历史输入内容。默认为on,关闭提示选择off 
autofocus : 指定表单获取输入焦点 
list和datalist : 为输入框构造一个选择列表 
list值为datalist标签的id 
required : 此项必填,不能为空 
pattern : 正则验证 pattern="\d{1,5}" 
formaction 在submit里定义提交地址。
保存到草稿:
<input type="submit" value="保存至草稿箱" formaction="http://www.qq.com" />

5、表单验证

表单验证
Invalid事件 : 验证反馈 input.addEventListener(‘invalid‘,fn,false) 
阻止默认验证:ev.preventDefault() 
formnovalidate属性 : 关闭验证

validity对象,通过下面的valid可以查看验证是否通过,如果八种验证都通过返回true,一种验证失败返回false

oText.addEventListener("invalid",fn1,false); 
ev.preventDefault()

valueMissing : 输入值为空时 
typeMismatch : 控件值与预期类型不匹配 
patternMismatch : 输入值不满足pattern正则 
tooLong : 超过maxLength最大限制 
rangeUnderflow : 验证的range最小值 
rangeOverflow:验证的range最大值 
stepMismatch: 验证range 的当前值 是否符合min、max及step的规则 
customError 不符合自定义验证 
setCustomValidity(); 自定义验证

eg:
var oText=document.getElementById("text");
oText.addEventListener("invalid",fn,false);
function fn()
{
alert(this.validity.patternMismatch);// 八种验证不匹配不一致的时候返回true
ev.preventDefault();
}


HTML5新特性

1、新的选择器:

querySelector 只能选择一组中的第一个元素:
var oDiv = document.querySelector(‘#box‘); //也可通.class和[title=box]选择

querySelectorAll 获取一组元素:
var aDiv = document.querySelectorAll(‘.box‘);

getElementsByClassName:通过class获取元素
var aDiv = document.getElementsByClassName(‘box‘); //可以获取一组元素

获取class列表属性:classList: 
length : class的长度 
add() : 添加class方法 
remove() : 删除class方法 
toggle() : 切换class方法

var oDiv = document.getElementById(‘div1‘);
alert( oDiv.classList ); //类似与数组的对象
alert( oDiv.classList.length ); //3
oDiv.classList.add(‘box4‘);
oDiv.classList.remove(‘box2‘);
oDiv.classList.toggle(‘box2‘);//当box2存在时则删除,当box2不存在时则添加

2、JSON的新方法

JSON.parse() : 把字符串转成js。字符串中的属性要严格的加上引号。 
JSON.stringify() : 把json转化成字符串。会自动的把双引号加上。

新方法与eval的区别:
eval : 可以解析任何字符串变成JS
parse : 只能解析JSON形式的字符串变成JS (安全性要高一些)

新方法的应用:可以深度克隆新对象,为了防止对象的引用造成互相的影响可以进行:

浅拷贝:for in
var a = {
name : ‘hello‘
};

var b = {};

for(var attr in a){
b[attr] = a[attr];
}

b.name = ‘hi‘;

alert( a.name ); //hello

深拷贝:

var a = {
name : { age : 100 }
};

var str = JSON.stringify(a);

var b = JSON.parse(str);

b.name.age = 200;

alert( a.name.age ); //100

如何其他浏览器做到兼容:(IE8以下不支持) 
http://www.json.org/去下载json2.js

3、data自定义数据

很多库都采用自定义数据,使得JS与HTML进行分离,比如jQuery mobile

dataset:

data-name : dataset.name 
data-name-first : dataset.nameFirst

eg:

<div id="div1" data-miao="喵" data-miao-all="喵">div</div>

var oDiv = document.getElementById(‘div1‘);

//JS获取自定义属性:
oDiv.dataset.miao

oDiv.dataset.miaoAll

4、延迟加载JS

JS的加载会影响后面的内容加载。很多浏览器都采用了并行加载JS,但还是会影响其他内容。

defer : 延迟加载,会按顺序执行,在onload执行前被触发:

<script src="a.js" defer="defer"></script>
<script src="b.js" defer="defer"></script>

async : 异步加载,加载完就触发,有顺序问题,有依赖关系的JS不要异步

<script src="a.js" async ="async"></script>
<script src="b.js" async ="async"></script>

Labjs库:可以处理是否有依赖关系的JS,来控制谁应该异步加载。

5、历史管理 :

触发历史管理:

1)通过跳转页面

2)onhashchange :改变hash值来管理

eg : 点击按钮随机产生数字,多次点击,可以点击浏览器后退按钮进行后退

var json = {};

function randomNum(){ .. .. }//随机获取数字的函数

oInput.onclick = function(){

var num = Math.random();

var arr = randomNum(35,7);

json[num] = arr;

oDiv.innerHTML = arr;

window.location.hash = num;

};

window.onhashchange = function(){

oDiv.innerHTML = json[window.location.hash.substring(1)];

};

3)history :

服务器下运行

pushState : 三个参数 :数据 标题(都没实现) 地址(可选)

popstate事件 : 读取数据 event.state

注意:网址是虚假的,需在服务器指定对应页面,不然刷新找不到页面

eg : 点击按钮随机产生数字,多次点击,可以点击浏览器后退按钮进行后退

function randomNum(){ .. .. }//随机获取数字的函数

Input.onclick = function(){

var arr = randomNum(35,7);

history.pushState(arr,‘‘,arr);

oDiv.innerHTML = arr;

};

window.onpopstate = function(ev){

oDiv.innerHTML = ev.state;

};


拖放:

拖放事件 :

1)draggable :设置为true,元素就可以拖拽了

<li draggable="true">a</li>

2)拖拽元素事件 : 事件对象为被拖拽元素

dragstart , 拖拽前触发

drag ,拖拽前、拖拽结束之间,连续触发

dragend , 拖拽结束触发

3)目标元素事件 : 事件对象为目标元素

dragenter , 进入目标元素触发,相当于mouseover

dragover ,进入目标、离开目标之间,连续触发

dragleave , 离开目标元素触发,相当于mouseout

drop , 在目标元素上释放鼠标触发

eg:

oDiv.ondragenter = function(){

this.style.background = ‘blue‘;

};

oDiv.ondragover = function(ev){

//enter和leave之间连续触发

//要想触发drop事件,就 必须在dragover当中阻止默认事件

var ev = ev || window.event;

ev.preventDefault();

};

oDiv.ondragleave = function(){

this.style.background = ‘red‘;

};

oDiv.ondrop = function(){

alert(123);

};

eg:拖放网页上子图片资源:

img1.ondragstart = function(e){

e.dataTransfer.setData("imgId","img1");//设置被拖数据的数据类型和值

}

boxDiv.ondragover = function(e){//ondragover 事件规定在何处放置被拖动的数据。

e.preventDefault();//阻止系统默认的事件

}

boxDiv.ondrop = function (e){//处理drop事件接受释放的元素

showObj(e.dataTransfer);////显示事件详细信息

e.preventDefault();

var img = document.getElementById(e.dataTransfer.getData("imgId"));

e.target.appendChild(img);//把被拖元素追加到放置元素(目标元素)中

}

4)事件的执行顺序

事件的执行顺序 :drop不触发的时候

dragstart > drag > dragenter > dragover > dragleave > dragend

事件的执行顺序 :drop触发的时候(dragover的时候阻止默认事件)

dragstart > drag > dragenter > dragover > drop > dragend

不能释放的光标和能释放的光标不一样

5)dataTransfer对象

解决火狐下的问题:

必须设置dataTransfer对象才可以拖拽除图片外的其他标签

dataTransfer对象:

setData() : 设置数据 key和value(必须是字符串)

getData() : 获取数据,根据key值,获取对应的value

effectAllowed : 设置光标样式(none, copy, copyLink, copyMove, link, linkMove, move, all 和 uninitialized)

setDragImage 设置拖拽过程中的背景图。三个参数:指定的元素,坐标X,坐标Y。

files 获取外部拖拽的文件,返回一个filesList列表。filesList下有个type属性,返回文件的类型。

aLi[i].ondragstart = function(ev){

var ev = ev || window.event;

ev.dataTransfer.setData(‘name‘,‘hello‘);

ev.dataTransfer.effectAllowed = ‘link‘;

ev.dataTransfer.setDragImage(oImg,0,0);

};

···

oDiv.ondrop = function(ev){

oUl.removeChild( aLi[ev.dataTransfer.getData(‘name‘)] );

}

6)FileReader对象(读取文件信息)

readAsDataURL :参数为要读取的文件对象,将文件读取为DataUrl

onload:当读取文件成功完成的时候触发此事件。this. result 来获取读取的文件数据,如果是图片,将返回base64格式的图片数据

拖放外部图片资源:

window.onload = function(){

var imgContainer = document.getElementById("imgContainer");

var msgDiv=document.getElementById("msg");

imgContainer.ondragover = function(e){

e.preventDefault();

}

imgContainer.ondrop = function(e){

e.preventDefault();

var f = e.dataTransfer.files[0];

var fileReader = new FileReader();

fileReader.readAsDataURL(f);

fileReader.onload = function(e){

imgContainer.innerHTML=" <img src=\" "+fileReader.result+" \">" // \"为转义字符

}

}

}


音频视频:

<audio controls src="johann_sebastian_bach_air.mp3"></audio>

<video controls src="Intermission-Walk-in.ogv"></video>

controls控件必须写上

1)为了兼容浏览器添加多个视频格式:

<video controls>

<source src="Intermission-Walk-in.ogv"></source>

<source src="Intermission-Walk-in.mp4"></source>

</video>

2)媒体元素 :

controls : 显示或隐藏用户控制界面

autoplay : 媒体是否自动播放

loop : 媒体是否循环播放

<audio controls autoplay loop src="johann_sebastian_bach_air.mp3"></audio>

3)JS设置和只读元素:

currentTime : 开始到播放现在所用的时间

duration : 媒体总时间(只读)

volume : 0.0-1.0的音量相对值

muted : 是否静音 静音为false 有声为true

autobuffer : 开始的时候是否缓冲加载,autoplay的时候,忽略此属性

paused : 媒体是否暂停(只读)

ended : 媒体是否播放完毕(只读)

error : 媒体发生错误的时候,返回错误代码 (只读)

currentSrc : 以字符串的形式返回媒体地址(只读)

var oA = document.getElementById(‘a1‘);

oA.currentTime = 60;

console.log( oA.duration );

console.log( oA.volume );

4)控制函数:

play() : 媒体播放

pause() : 媒体暂停

load() : 重新加载媒体

mozRequestFullScreen():全屏

var oV = document.getElementById(‘v1‘);

var oInput = document.getElementById(‘input1‘);

var aS = document.getElementsByTagName(‘source‘);

oV.onmouseover = function(){

this.play();

this.mozRequestFullScreen();

};

oV.onmouseout = function(){

this.pause();

};

oInput.onclick = function(){

aS[0].src = ‘xxxx.mp4‘;

aS[1].src = ‘yyyy.mp4‘;

oV.load(); //动态修改播放地址的后要重新加载,执行load()函数,否则修改不生效。

};

5)事件:

loadstart progress suspend emptied stalled play pause loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange

oV.addEventListener(‘ended‘,function(){ //播放结束后的事件

alert(123);

},false);

6)Video额外特性

poster : 视频播放前的预览图片

width、height : 设置视频的尺寸

videoWidth、 videoHeight : 视频的实际尺寸,无论是否修改,显示默认的尺寸(只读)

oV.poster = ‘2.png‘;

oV.width = 500;

oV.height = 500;

alert( oV.videoWidth );


跨文档消息通信、地理信息、本地存储、离线存储

1、跨文档消息通信

1)同域下的窗口通信:

iframe方法:

如果我们要操作一个iframe里面的dom元素,首先要获取到iframe引入的页面的window

var Iframe= document.getElementById(‘myframe‘);

Iframe.contentWindow -> 被iframe包含的页面的window对象

Iframe.contentWindow.document.body.style.background = ‘red‘;

当本页面和包含页面不在同一个域名下的时候,这样操作就会有跨域操作安全限制问题。

如果我们要在iframe中操作父级页面:

parent => window 如果当前页面是顶级,没有被其他页面所包含,那么parent就是当前页面的window对象,那么如果被包含了,则parent就是包含当前页面的父级页面的window对象

window : 当前窗口 
parent : 父级窗口
top : 顶级窗口(最外面的父级)

parent.document.body.style.background = ‘green‘;

window.open方法:

window.open 返回被打开窗口的window对象

打开之后并改变背景颜色:

window.open(‘4.window.open.html‘, ‘_blank‘).document.body.style.background = ‘red‘;

window.opener : 返回通过window.open方法打开当前页面的窗口window

该方法适用在一个页面(A)用window.open方法打开的新页面(B)中,来操作之前的页面(A)

window.opener.document.body.style.background = ‘green‘;

2)跨文档消息通信(不同域下的窗口通信)

假设发送消息的域名为a.com,接收域为b.com

a.com下:

postMessage对象,可以通过这个方法给另外一个窗口发送信息。

接收消息的window对象.postMessage()

第一个参数:发送的数据
第二个参数:接收数据的域名{带上协议(http://)}

var oMyIframe = document.getElementById(‘myframe‘);
oMyIframe.contentWindow.postMessage(‘1‘, ‘http://www.b.com‘);

b.com下:

message : 当窗口接收到通过postMessage发送过来的数据的时候触发

message事件的事件对象下保存了发送过来的内容

ev.data : 发送过来的数据

ev.origin:发送数据的来源

window.addEventListener(‘message‘, function(ev) {

alert(ev.data); // 1

alert(ev.origin);// http://www.a.com

alert(‘我接收到了a.com页面发送过来的数据,内容是:‘ + ev.data);

if (ev.data == ‘1‘) { // a.com相当于发送指令给b.com,然后b.com确认后作出相应的改变

document.body.style.background = ‘red‘;

}

}, false);

2、ajax新增特性:

同域下的:

var oBtn = document.getElementById(‘btn‘);

oBtn.onclick = function() {

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {

if (xhr.readyState == 4) {

if (xhr.status == 200) {

alert(xhr.responseText);

}

}

}

xhr.open(‘get‘, ‘ajax.php‘, true);

xhr.send();

}

跨域下的:

在标准浏览器下,XMLHttpRequest对象已经是升级版本,支持了更多的特性,可以跨域了。但是,如果想实现跨域请求,还需要后端的相关配合,后端要设置响应头信息:

<?php

header(‘Access-Control-Allow-Origin:http://www.a.com‘); //这是允许访问该资源的域

XMLHttpRequest : 增加很多功能,它也不推荐使用onreadystatechange这个事件来监听,推荐使用新事件onload

XDomainRequest : IE如果想实现跨域请求,则需要使用另外一个对象XDomainRequest 去实现

var oXDomainRequest = new XDomainRequest();

oXDomainRequest.onload = function() {

alert(this.responseText);

}

oXDomainRequest.open(‘get‘, ‘http://www.b.com/ajax.php‘, true);

oXDomainRequest.send();

ajax实现无刷新页面上传(带进度条):

进度事件:

upload.onprogress :上传过程中的事件

FormData对象,通过FormData来构建二进制,提交数据

ev.total(发送的总量)

ev.loaded(已发送的数量)

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>无标题文档</title>

<style>

#div1 {width: 300px; height: 30px; border: 1px solid #000; position: relative;}

#div2 {width: 0; height: 30px; background: #CCC;}

#div3 {width: 300px; height: 30px; line-height: 30px; text-align: center; position: absolute; left: 0; top: 0;}

</style>

<script>

window.onload = function() {

var oBtn = document.getElementById(‘btn‘);

var oMyFile = document.getElementById(‘myFile‘);

var oDiv1 = document.getElementById(‘div1‘);

var oDiv2 = document.getElementById(‘div2‘);

var oDiv3 = document.getElementById(‘div3‘);

oBtn.onclick = function() {

//alert(oMyFile.value); //获取到的是file控件的value值,这个内容是显示给你看的文字,不是我们选择的文件

//oMyFile.files :file控件中选择的文件列表对象

//alert(oMyFile.files);

//我们是要通过ajax把oMyFile.files[0]数据发送给后端

var xhr = new XMLHttpRequest();

xhr.onload = function() {

//var d = JSON.parse(this.responseText);

//alert(d.msg + ‘ : ‘ + d.url);

alert(‘OK,上传完成‘);

oDiv2.style.background = "green";

}

var oUpload = xhr.upload;

oUpload.onprogress = function(ev) {

//console.log(ev.total + ‘ : ‘ + ev.loaded);

var iScale = ev.loaded / ev.total;

oDiv2.style.width = 300 * iScale + ‘px‘;

oDiv3.innerHTML = iScale * 100 + ‘%‘;

}

xhr.open(‘post‘, ‘post_file.php‘, true); // 大数据量的用post

xhr.setRequestHeader(‘X-Request-With‘, ‘XMLHttpRequest‘); //设置请求头信息

var oFormData = new FormData(); //通过FormData来构建二进制,提交数据

oFormData.append(‘file‘, oMyFile.files[0]); //file为后端要接收文件设置的值

xhr.send(oFormData);

}

}

</script>

</head>

<body>

<input type="file" id="myFile" /><input type="button" id="btn" value="上传" />

<div id="div1">

<div id="div2"></div>

<div id="div3">0%</div>

</div>

</body>

</html>

3、applicationCache离线存储:

搭建离线应用程序:

①服务器设置头信息 : (在apache下的配置文件httpd中写上这一句)

AddType text/cache-manifest .manifest

② html标签加 :

manifest=“xxxxx.manifest”

③写manifest文件 : 离线的清单列表(在同目录下创建xxxxx.manifest)

先写 :

CACHE MANIFEST

其他:

FALLBACK : 第一个网络地址没获取到,就走第二个缓存的

NETWORK :无论缓存中存在与否,均从网络获取

eg:

CACHE MANIFEST

2.png

FALLBACK

style1.css style2.css

4、Web Workers:

什么是worker?

JS的单线程(放入UI队列的个数,利用定时器解决)

可以让web应用程序具备后台处理能力,对多线程的支持非常好。

Worker API:

new Worker(‘后台处理的JS地址’)

利用postMessage传输数据

importScripts(‘导入其他JS文件’)

Worker运行环境:

navgator : appName、appVersion、userAgent、platform

location : 所有属性都是只读的

self : 指向全局 worker 对象

所有的ECMA对象,Object、Array、Date等

XMLHttpRequest构造器

setTimeout和setInterval方法

close()方法,立刻停止worker运行

importScripts方法

5、websocket

互联网协议:

http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html 
TCP/IP协议 
定义了电子设备如何连入因特网,以及数据在它们之间传输的标准(如何传输) 
传输数据(协议)类型:Email,www,FTP等 
HTTP协议 
浏览器和万维网服务器之间互相通信的规则

HTTP协议特点 
功能很强大 
采用请求、响应模式,单项通信 
短连接,响应完成连接就断开

实时web交互: 
股票、聊天室、网游等应用 
如果实现实时应用?服务器推送

什么是web socket? 
基于TCP的双向的、全双工的数据连接 
双向的:客户端、服务器端 
全双工:数据的发送与接收,两者同步进行

建立socket应用? 
服务器必须支持web socket. 
Nodejs的简介: 
Ryan Dahl基于GoogleV8引擎创建的一套用来编写高性能网络服务器的JavaScript工具包 
Nodejs : 用js去写服务器应用

一个简单的web服务器 
创建HTTP服务 
监听客户端HTTP请求连接 
处理请求响应,向客户端输出返回内容 
Websocket连接 
客户端发送Websocket连接请求 
服务器监听来自Websocket连接请求 
当连接成功后,客户端和服务器可以随时接收和发送数据


地理位置与本地存储

地理位置:

1、地理位置:

经度 : 南北极的连接线 
纬度 : 东西连接的线

2、位置信息从何而来:

IP地址 
GPS全球定位系统 
Wi-Fi无线网络 
基站

3、地理位置对象navigator.geolocation:

1)单次定位请求 :getCurrentPosition(请求成功,请求失败,数据收集方式)

2)请求成功函数 
经度 : coords.longitude 
纬度 : coords.latitude 
准确度 : coords.accuracy 
海拔 : coords.altitude 
海拔准确度 : coords.altitudeAcuracy 
行进方向 : coords.heading 
地面速度 : coords.speed 
时间戳 : new Date(position.timestamp)

3)请求失败函数: 
失败编号 :code 
0 : 不包括其他错误编号中的错误 
1 : 用户拒绝浏览器获取位置信息 
2 : 尝试获取用户信息,但失败了 
3 : 设置了timeout值,获取位置超时了

4)数据收集 : json的形式: 
enableHighAcuracy : 更精确的查找,默认false 
timeout : 获取位置允许最长时间,默认infinity 
maximumAge : 位置可以缓存的最大时间,默认0

5)多次定位请求 : watchPosition(像setInterval) 
移动设备有用,位置改变才会触发 
配置参数:frequency 更新的频率

6)关闭更新请求 : clearWatch(像clearInterval)

4、百度地图API<script src="http://api.map.baidu.com/api?v=1.3"></script>

本地存储:

Cookie:

数据存储到计算机中,通过浏览器控制添加与删除数据 
Cookie的特点:存储限制,域名100个cookie,每组值大小4KB。客户端、服务器端,都会请求服务器(头信息)。页面间的cookie是共享。

Storage:

sessionStorage:session临时回话,从页面打开到页面关闭的时间段 
窗口的临时存储,页面关闭,本地存储消失 
localStorage:永久存储(可以手动删除数据)

Storage的特点: 
存储量限制 ( 5M )。客户端完成,不会请求服务器处理。sessionStorage数据是不共享、 localStorage共享。

Storage API:

setItem(): 
设置数据,key\value类型,类型都是字符串 
可以用获取属性的形式操作 
getItem(): 
获取数据,通过key来获取到相应的value 
removeItem(): 
删除数据,通过key来删除相应的value 
clear(): 
删除全部存储的值

存储事件: 
当数据有修改或删除的情况下,就会触发storage事件 
在对数据进行改变的窗口对象上是不会触发的 
Key : 修改或删除的key值,如果调用clear(),key为null 
newValue : 新设置的值,如果调用removeStorage(),key为null 
oldValue : 调用改变前的value值 
storageArea : 当前的storage对象 
url : 触发该脚本变化的文档的url 
注:session同窗口才可以,例子:iframe操作


HTML5其他功能:

内容编辑 (相当于都变成了输入框) :

contenteditable="true“

语言输入 :

<input type="text" x-webkit-speech />

桌面提醒:

window.webkitNotifications.requestPermission();

statue = window.webkitNotifications.checkPermission();

var notification =window.webkitNotifications.createNotification("[imgurl]","Title","Body");

notification.show();

时间: 2024-10-25 18:09:25

HTML5笔记-加强版的相关文章

HTML5笔记3——Web Storage和本地数据库

上一篇:HTML5笔记2——HTML5音/视频标签详解 Web Storage概述 在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以再客户端本地保存数据的Web Storage功能,之前可以使用Cookies在客户端 保存诸如用户名等简单用户信息,但通过长期使用,人们发现使用Cookies存储永久数据存在几个问题. 大小:Cookies的大小被限制在4KB 带宽:Cookies是随HTTP失误一起被发送的,因此会浪费一部分发送Cookies时使用的带宽 复杂性:要正确的

Html5笔记 表格 布局

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTML5学习笔记</title> <style type="text/css"> p{ color: #ffff00; } body { margin: 0px; } #container { width: 100%; he

HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的整理思路,写到博客里还能做个备忘. 1) 跨域通讯 现在做企业项目,前端很不自然的会大量使用iframe标签,我以前在文章里提到iframe是一个效率极其低下的标签,但是如果项目没有什么性能的苛求,使用iframe还是非常的方便的. 使用iframe经常碰到父子窗体通讯的问题,我们看看下面的代码:

HTML5 &ndash; 3.加强版ol

<ol> 标签定义了一个有序列表. 列表排序以数字来显示. 使用<li> 标签来定义列表选项. 提示和注释 提示: 如果需要无序列表,请使用 <ul> 标签. 提示:使用 CSS 来定义列表样式. 属性 值 描述 compact compact HTML5 中不支持.HTML 4.01 中不赞成使用. 规定列表呈现的效果比正常情况更小巧. reversed reversed (HTML5)规定列表顺序为降序.(9,8,7...) start number 规定有序列表的

HTML5笔记之——视频

一.HTML5视频 1.支持的格式 2.格式 <video src="movie.ogg" width="320" height="240" controls="controls"> Your browser does not support the video tag. </video> control 属性供添加播放.暂停和音量控件. <video> 与 </video> 之

HTML5笔记(一)

1.HTML5提供了一些新的元素和属性,例如<nav>(网站导航块)和<footer>.这些标签较有利于搜索引擎的索引整理,同时更好的帮助小屏幕装置和视频人士使用,除此之外,还为其他浏览要素提供了新的功能.如<audio>和<video>标记. 2.一些过时的HTML4标记将被取消.其中包括纯粹显示效果的标记,如<font>和<center>.他们已经被cSS 取代. 3.<video>标记 定义和用法: <vide

HTML5笔记1——HTML5的发展史及标签的改变

记得第一次接触HTML5还是在<联信永益>实习那会儿(2011),当时一个项目技术选型的时候面临两种选择,分别是Silverlight和HTML5,记得当年用的最新的IE浏览器版本还是IE9,才刚刚开始支持HTML5.后来考虑到当时各个版本的浏览器对HTML5的支持都不怎么好,最终公司还是选择了Silverlight,想不到多年以后Silverlight没落了,HTML5却随着移动互联网的兴起而焕发出强大的活力. HTML5的发展路程 一路走来,我们回顾一下HTML的发展之路 HTML1.0

html5笔记(标签)

1.aside aside字面理解为“旁边”,在html5中范围更广一点,是跟主内容相关,但是又可以独立的内容 ,可以是广告.引用.侧边栏等等. html5站的例子就是新闻的内容页或者列表页,以列表页为例,主要内容为新闻的分页列表,右侧的则为aside,显示为新闻列表相关的最新新 2.figure <figure> 标签用于对元素进行组合.

html5笔记

1元素指的是从开始标签到结束标签的所有代码 <br/>换行,但是换行的间距跟p标签的间距不同 空元素在开始标签中进行关闭 大多数的html元素可拥有属性 大多数的html元素都是可以嵌套的 html属性: 1标签可以拥有属性为元素提供更多的信息 2属性以键值对的形式出现 3常用标签属性: <h1>:align对其方式 <body>:bgcolor背景颜色 <a>:target规定在何处打开链接(新的页面,默认的是当前页面,一共是4个) 4通用属性: clas