H5总结

H5现在已经不是SGML的子集,主要是关于图像、位置、存储多任务等功能的增加。


1、新增的语义化的标签

<nav>:导航

<header>: 页眉

<section>:区块

<article>: 文章

<aside>: 侧边栏

<footer>: 页脚

<progress>: 进度条


2、表单相关

(1)表单结构更加灵活

    要提交数据的控件可以布局在form标签之外,只需在元素中加入form="formId"属性,也可提交到form元素指定的服务器地址

<body>
<form action="xxx.php" method="post" accept-charset="utf-8" id="formId">
</form>
<input type="text" name="username" value="" form="formId">
<input type="submit" name="sub" value="提交" form="formId">
</body>


(2)新增表单元素

<input type="email">:email 类型用于验证email的格式,当提交表单时会自动验证email域的值

<input type="url">:url 类型用于验证 URL 地址的格式,当提交表单时会自动验证url域的值

<input type="number">:number 类型会根据你的设置提供选择数字的功能,min属性设置最小值、max属性设置最大值,value属性设置当前值,step属性设定每次增长的值,某些浏览器还不支持

<input type="range">:range 类型用于应该包含一定范围内数字值的输入域,其会以一个滑块的形式展现,min属性设置最小值、max属性设置最大值,value属性设置当前值,如果没有设置,则其默认值的范围是1-100

<input type="date"><input type="month"><input type="week"><input type="time"><input type="datetime">:

日期和时间类型:HTML5 拥有多个可供选取日期和时间的新输入类型:
date - 选取日、月、年
month - 选取月、年
week - 选取周和年
time - 选取时间(小时和分钟)
datetime - 选取时间、日、月、年(UTC 时间)
datetime-local - 选取时间、日、月、年(本地时间)

<input type="search">:search 类型用于搜索域,比如站点搜索或 Google 搜索,为其加上results="s"属性,则会在搜索框前面加上一个搜索图标

<input type="tel">:tel类型用于验证输入的是否是电话格式的内容,此元素现在还没有浏览器支持

<input type="color">:color类型会提供一个颜色拾取器,供用户选择颜色,并将用户选择的颜色填充到此元素中

<datalist id="list1"> 数据列表
        <option value="010">111</option>
        <option value="0313">222</option>
</datalist>

<input type="text" name="age" value="" list="list1">


(3)新增表单属性

新的form属性:

<form novalidate></form>: 关闭验证

新的input属性:

<input type="text" autocomplete="off">:自动完成

<input type="text" autofocus>:自动获得焦点

<input type="file" multiple>: 多文件上传

<input type="text" required>: 必填项

<input type="text" placeholder="请输入用户名">: 占位符

<input type="text" pattern="\d">:自定义验证pattern (regexp)

<input type="text" form="某表单ID">


3、多媒体

方法:load()、play()、pause()

属性:currentSrc、currentTime、duration

事件:ontimeupdate,onended等

应用:自定义视频播放器


(1)音频   <audio>,可以通过附加属性可以更友好控制音频的播放,如:

autoplay :自动播放

controls :是否显不默认播放控件

loop :循环播放

<audio controls autoplay loop="3">
   <!-- 通过source标签指定多格式音频文件-->
   <source src="./music/See You Again.mp3">
   <source src="./music/See You Again.wav">
   <source src="./music/See You Again.ogg">
</audio>

(2)视频  <video>

autoplay :自动播放

controls :是否显示默认播放控件

loop :循环播放

width :设置播放窗口宽度

height :设置播放窗口的高度


4、web存储

传统:document.cookie来存储:

缺点:存储大小只有4k左右,并且解析也相当的复杂,给开发带来诸多不便;

H5新增:

 (1)window.sessionStorage:

特性:

  • 生命周期为关闭浏览器窗口
  • 在同一个窗口下数据可以共享

 (2)window.localStorage:

特性:

  • 永久生效,除非手动删除;可以多窗口共享

以上两者的特性:

  • 设置、读取方便
  • 容量较大,sessionStorage约5M、localStorage约20M
  • 只能存储字符串,可以将对象JSON.stringify() 编码后存储

(3)方法详解

setItem(key, value) 设置存储内容

getItem(key) 读取存储内容

removeItem(key) 删除键值为key的存储内容

clear() 清空所有存储内容

key(n) 以索引值来获取存储内容

(4)其它

WebSQL、IndexDB


5、拖拽

(1)拖拽元素

ondrag 应用于拖拽元素,整个拖拽过程都会调用

ondragstart 应用于拖拽元素,当拖拽开始时调用

ondragleave 应用于拖拽元素,当鼠标离开拖拽元素时调用

ondragend 应用于拖拽元素,当拖拽结束时调用

设置了draggable="true"属性的元素,可以被拖拽了;其中<img>、<a>标签默认是可以被拖拽的;


(2)目标元素

ondragenter 应用于目标元素,当拖拽元素进入时调用

ondragover 应用于目标元素,当停留在目标元素上时调用

ondrop 应用于目标元素,当在目标元素上松开鼠标时调用

ondragleave 应用于目标元素,当鼠标离开目标元素时调用

页面中任何一个元素都可以成为目标元素


(3)事件监听

根据元素类型不同,需要设置不同的事件监听


6、DOM扩展

(1)获取元素

  1. document.getElementsByClassName ('class')  ——   通过类名获取元素,以伪数组形式存在。
  2. document.querySelector('selector')  ——  通过CSS选择器获取元素,符合匹配条件的第1个元素。
  3. document.querySelectorAll('selector')  ——  通过CSS选择器获取元素,以伪数组形式存在。


(2)类名操作

  1. Node.classList.add('class')  ——  添加一个class类名
  2. Node.classList.remove('class')  ——  移除一个class类名
  3. Node.classList.toggle('class')  ——  切换class,有则移除,无则添加
  4. Node.classList.contains('class')  ——  检测是否存在一个class类名

Node指一个有效的DOM节点,是一个通称。


(3)自定义属性

格式:data-*="";

例如:data-info="我是自定义属性",通过Node.dataset['info'] 我们可获取到自定义的属性值。

特点:自定义属性全部必须是以data-开头的,只要是符合这种格式就是自定义属性。

Node.dataset是以对象形式存在的,当我们为同一个DOM节点指定了多个自定义属性时,Node.dataset则存储了所有的自定义属性的值。

假设某元素 <div id="demo" data-name="itcast" data-age="10">

var demo = document.querySelector('#demo');

1、读取 demo.dataset['name'] 或者 demo.dataset['age']

2、设置demo.dataset['name'] = 'web developer'

注:当我们如下格式设置时,则需要以驼峰格式才能正确获取

<div data-my-name="lining"> 这样获取Node.dataset['myName']

总结:

  • 获取一个DOM节点,并且这个DOM节点定义了一些自定义属性
  • 通过Node.dataset,管理/读取/设置自定义属性
  • Node.dataset.属性
  • Node.dataset.属性 = “属性值”


7、新增API

(1)网络状态

我们可以通过window.onLine来检测,用户当前的网络状况,返回一个布尔值。

window.online用户网络连接时被调用

window.offline用户网络断开时被调用


(2)全屏

HTML5规范允许用户自定义网页上任一元素全屏显示。

1、Node.requestFullScreen() :开启全屏显示

2、Node.cancelFullScreen() :关闭全屏显示

由于其兼容性原因,不同浏览器需要添加前缀如:

webkit内核浏览器:webkitRequestFullScreen、webkitCancelFullScreen,如chrome浏览器。

Gecko内核浏览器:mozRequestFullScreen、mozCancelFullScreen,如火狐浏览器。

3、document.fullScreen:检测当前是否处于全屏

不同浏览器需要添加前缀

document.webkitIsFullScreen、document.mozFullScreen

全屏伪类选择器

:full-screen .box {}、:-webkit-full-screen {}、:moz-full-screen {}


(3)文件读取

通过FileReader对象可以读取本地存储的文件,使用 File 对象来指定所要读取的文件或数据。

File对象可以是来自用户在一个 <input> 元素上选择文件后返回的FileList 对象,也可以来自由拖放操作生成的  DataTransfer


(4)FileList对象

由于HTML5中我们可以通过为表单元素添加multiple属性,因此我们通过<input>上传文件后得到的是一个FileList对象(伪数组形式)。

<input type="file" multiple class="file">

// 获取file表单元素
var file = document.querySelector('.file');
file.onchange = function () {
   console.log(file.files); //FileList {0: File, length: 1}
}


(5)FileReader对象

HTML5新增内建对象,可以读取本地文件内容。

var reader = new FileReader; 可以实例化一个对象

实例方法

事件监听

onload 当文读取完成时调用

属性

result 文件读取结果

<script>
   // 获取file表单元素
   var file = document.querySelector('.file');
   file.onchange = function () {
      // 获取第一个文件信息
      var f = this.files[0];
      // 实例化一个读取器
      var reader = new FileReader();
      console.log(reader);
      // 读取文件
      reader.readAsDataURL(f);
      // reader.readAsBinaryString(f);
      // reader.readAsText(f);
      // 当文件过大,不能立即读完
      // 通过事件监听进度
      reader.onload = function () {
         console.log(this.result);
         document.querySelector('img').src = this.result;
      }
   }
</script>

8、地理定位

(1)获取地理信息

通过IP地址、三维坐标、GPS、Wi-Fi、手机信息等多种方式获取地址信息,不同获取方式各有优缺点,浏览器会自动以最优方式去获取用户地理信息。


(2)隐私

HTML5 Geolocation 规范提供了一套保护用户隐私的机制。必须先得到用户明确许可,才能获取用户的位置信息。


(3)API详解

1、获取当前地理信息

navigator. geolocation.getCurrentPosition(successCallback, errorCallback, options) ;

2、重复获取当前地理信息

navigator. geolocation.watchPosition(successCallback, errorCallback, options);

当成功获取地理信息后,会调用succssCallback,并返回一个包含位置信息的对象position。

position.coords.latitude纬度

position.coords.longitude经度

position.coords.accuracy精度

position.coords.altitude海拔高度

当获取地理信息失败后,会调用errorCallback,并返回错误信息error

可选参数 options 对象可以调整位置信息数据收集方式

a) enableHighAccuracy 高精度模式  true/false

b) timeout 超时设置,单位为ms

c) maximumAge表示浏览器重新获取位置信息的时间间隔,单位为ms

navgator.geoloation.getcurrentPosition(success,error,{

enableHighAccuracy: true;

timeout : 3000

 maximumAge: 1000

});

3、应用

在现实开发中,把获得到的客户的具体信息当做参数通过调用第三方API(如百度地图)来实现地理定位信息,这些API都是基于用户当前位置的,并将用位置位置(经/纬度)当做参数传递,就可以实现相应的功能。

<body> 
  <div id="container"></div>
   <!-- 引入百度javascript版 API -->
   <script src="http://api.map.baidu.com/api?v=2.0&ak=0A5bc3c4fb543c8f9bc54b77bc155724"></script>
   <script>
      // 提供了一个对象 navigator.geolocation
      // 此对象下有一个方法 getCurrentPosition(); 是用来获取用户当前位置
      // 成功的回调
      function success(position) {
         // alert(1);
         console.log(position);
      }
      // 失败的回调
      function error(err) {
         console.log('error');
         console.log(err);
      }
      // 获得用户当前信息
      // navigator.geolocation.getCurrentPosition(success, error, {
      //     // enableHighAccuracy: true,
      //     // timeout: 3000,
      //     // maximumAge: 1000
      // });
      navigator.geolocation.getCurrentPosition(function (position) {
         var latitude = position.coords.latitude; // 纬度
         var longitude = position.coords.longitude; // 经度
         // 查看地理信息
         console.log(position);
         /********************/
         // 这些都是写死
         var map = new BMap.Map("container"); // container表示主到哪个容器
         // 把经度纬度传给百度
         var point = new BMap.Point(longitude, latitude);
         // 调用方法
         map.centerAndZoom(point, 15);
         /****************************/
         // 只写上面三行就可出现地图了,并且会定位
         // 定义好了一个图片标记
         var myIcon = new  BMap.Icon("http://developer.baidu.com/map/jsdemo/img/fox.gif", new BMap.Size(300, 157));
         // 创建标注
         var marker = new BMap.Marker(point, {icon: myIcon});
         // 调用方法
         map.addOverlay(marker);
      });
   </script>
</body>


9、历史管理

提供window.history对象,可以管理历史记录,可用于单页面应用:Single Page Application,可以无刷新改变网页内容。

(1)旧版本

history.back() 回退

history.forward() 前进

history.go(n) 前进/后退n步

history.length历史记录条数


(2)新增方法

1、pushState(data, title, url) 追加一条历史记录

data用于存储自定义数据,通常设为null

title网页标题,基本上没有被支持,一般设为空

url 以当前域为基础增加一条历史记录,不可跨域设置

2、replaceState(data, title, url)

与pushState()基本相同,不同之处在于replaceState(),只是替换当前url,不会增加/减少历史记录。

3、事件监听

onpopstate事件,当前进或后退时则触发,通过事件对象ev.state可以读取到存储的数据。


10、应用缓存

HTML5中我们可以轻松的构建一个离线(无网络状态)应用,只需要创建一个cache manifest文件。

(1)优势:

  • 可配置需要缓存的资源
  • 网络无连接应用仍可用
  • 本地读取缓存资源,提升访问速度,增强用户体验
  • 减少请求,缓解服务器负担


(2)缓存清单

一个普通文本文件,其中列出了浏览器应缓存以供离线访问的资源,推荐使用.appcache为后缀名,添加MIME类型

AddType text/cache-manifest .appcache

例如我们创建了一个名为demo.appcache的文件,然后在需要应用缓存在页面的根元素(html)添加属性manifest="demo.appcache",路径要保证正确。


(3)manifest文件格式

  • 顶行写CACHE MANIFEST
  • CACHE: 换行 指定我们需要缓存的静态资源,如.css、image、js等
  • NETWORK: 换行 指定需要在线访问的资源,可使用通配符
  • FALLBACK: 换行 当被缓存的文件找不到时的备用资源

CACHE MANIFEST

#version 1.0.0

#缓存一些资料,在离线时使用

CACHE:

./images/img1.jpg

./images/img2.jpg

./images/img3.jpg

#当处于网络连接时可以更新

NETWORK:

./css/main.css

FALLBACK:

./online.html ./offline.html

./css/online.css ./css/offline.css

CACHE:

./images/img1.jpg

./images/img2.jpg

./images/img3.jpg


(4)其它

1、CACHE: 可以省略,这种情况下将需要缓存的资源写在CACHE MANIFEST

2、可以指定多个CACHE: NETWORK: FALLBACK:,无顺序限制

3、#表示注释,只有当demo.appcache文件内容发生改变时或者手动清除缓存后,才会重新缓存。

4、chrome 可以通过chrome://appcache-internals/工具和离线(offline)模式来调试管理应用缓存

11、兼容处理

    在不支持HTML5新标签的浏览器里,会将这些新的标签解析成行内元素(inline)对待,所以我们只需要将其转换成块元素(block)即可使用,但是在IE9版本以下,并不能正常解析这些新标签,但是却可以识别通过document.createElement('tagName')创建的自定义标签,于是我们的解决方案就是将HTML5的新标签全部通过document.createElement('tagName')来创建一遍,这样IE低版本也能正常解析HTML5新标签了,但在实际开发中我们更多采用的是通过检测IE浏览器的版本来加载第三方的一个JS库来解决兼容问题,这个库文件会帮自动通过document.createElement('tagName')创建所有HTML5的新标签。


12、微数据

微数据是在如 span、div 的标签内添加属性,让机器(如搜索引擎)识别其含义,某些特定类型的信息,例如评论、人物信息或事件都有相应的属性,用来描述其含义,可以理解成新语义标签的一种补充。


13、WAI-ARIA

WAI-ARIA[1]  , 是Web Accessibility Initiative - Accessible Rich Internet Applications 的缩写,让残障人士能无障碍地访问网页上的动态内容。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值