HTML5学习

233 阅读15分钟

自己的学习记录,有什么不对的望指正。

新元素

1. canvas 新元素

 <canvas> 标签定义图形,比如图表和其他图像。该标签基于 JavaScript 的绘图 API

2. 新多媒体元素

<audio>    定义音频内容
<video>    定义视频(video 或者 movie)
<source>   定义多媒体资源 <video> 和 <audio>
<embed>    定义嵌入的内容,比如插件。
<track>    为诸如 <video> 和 <audio> 元素之类的媒介规定外部文本轨道。

3. 新表单元素

<datalist>  定义选项列表。请与 input 元素配合使用该元素,来定义 input 可能的值。
<keygen>    规定用于表单的密钥对生成器字段。
<output>    定义不同类型的输出,比如脚本的输出。

4. 新的语义和结构元素

<article>	定义页面独立的内容区域。
<aside>	    定义页面的侧边栏内容。
<bdi>	  允许您设置一段文本,使其脱离其父元素的文本方向设置。
<command>	定义命令按钮,比如单选按钮、复选框或按钮
<details>	用于描述文档或文档某个部分的细节
<dialog>	定义对话框,比如提示框
<summary>	标签包含 details 元素的标题
<figure>	规定独立的流内容(图像、图表、照片、代码等等)。
<figcaption>	定义 <figure> 元素的标题
<footer>	定义 section 或 document 的页脚。
<header>	定义了文档的头部区域
<mark>	定义带有记号的文本。
<meter>	定义度量衡。仅用于已知最大和最小值的度量。
<nav>	定义导航链接的部分。
<progress>	定义任何类型的任务的进度。
<ruby>	定义 ruby 注释(中文注音或字符)。
<rt>	定义字符(中文注音或字符)的解释或发音。
<rp>	在 ruby 注释中使用,定义不支持 ruby 元素的浏览器所显示的内容。
<section>	定义文档中的节(section、区段)。
<time>	定义日期或时间。
<wbr>	规定在文本中的何处适合添加换行符。


Canvas

1. 基本使用

  1. var c=document.getElementById("myCanvas");

  2. var ctx=c.getContext("2d");

2. 矩形

fillRect( x , y , width , height)  填充以(x,y)为起点宽高分别为width、height的矩形 默认为黑色

stokeRect( x , y , width , height) 绘制一个空心以(x,y)为起点宽高分别为width、height的矩形

clearRect( x, y , width , height )  清除以(x,y)为起点宽高分别为width、height的矩形 为透明

3. 路径

beginPath() 新建一条路径一旦创建成功 绘制命令将转移到新建的路径上

moveTo( x, y ) 移动画笔到(x , y) 点开始后面的绘制工作

closePath() 关闭该路径 将绘制指令重新转移到上下文

stroke() 将绘制的路径进行描边

fill() 将绘制的封闭区域进行填充

4. 圆弧

arc( x , y , r , startAngle , endAngle ,  anticlosewise ) 

以(x,y)为圆心 r为半径的圆  绘制startAngle弧度 到endAngle弧度的圆弧 anticlosewise默认为false 即顺时针方向 true为逆时针方向

arcTo( x1 , y1 , x2 , y2 , radius ) 

根据 两个控制点 (x1,y1) 和 (x2, y2)以及半径绘制弧线 同时连接两个控制点

5. 贝塞尔曲线

  1. 二次贝塞尔曲线
quadraticCurveTo( cp1x, cp1y , x ,y )   // (cp1x,cp1y) 控制点    (x,y)结束点

  1. 三次贝塞尔曲线
bezierCurveTo( cp1x, cp1y ,cp2x , cp2y ,x , y )//(cp1x,cp1y)控制点1   (cp2x,cp2y) 控制点2  (x,y)结束点

6. 样式添加

fillStyle = color    color 可以为颜色值、渐变对象(并非样式!!!!)

strokeStyle = color  color 可以为颜色值、渐变对象(并非样式!!!!)

lineWidth  = value  线宽

lineCap = type (butt 、 round 、square)线条末端样式   依次是方形、圆形&突出、方形&突出

lineJoin = type (round 、bevel 、 miter)线条交汇处样式 依次是圆形、平角 、 三角形

ctx.setLineDash([ 实际长度 , 间隙长度 ]) 虚线 setLineDash接受数组

ctx.lineDashOffet  设置偏移量

7. 渐变

var gradient = ctx.createLinearGradient( x1 ,y1 ,x2 ,y2);  线性渐变

var gradient = ctx.createRadialGradient(x1 ,y1 ,r1 ,x2 ,y2 ,r2); 径向渐变

gradient.addColorStop( position , color )  position:相对位置0~1    color:该位置下的颜色

8. 透明度

ctx.globalAlpha = value (0~1)

9. 文本

fillText( text , x , y , [,maxWidth]) 在(x,y)位置绘制text文本  最大宽度为maxWidth(可选)

strokeText( text ,x ,y ,[,maxWidth]) 在(x,y)位置绘制text文本边框  最大宽度为maxWidth(可选)

font = value               eg:"100px sans-serif"  

10. 绘制图片

drawImage( image , x , y , width , height ) image为图片对象、从(x,y)处放置宽高分别为width height的图片

drawImage( image , sx , sy , swidth , sheight ,dx ,dy ,dwidth ,dheight) 切片前四个是定义图像源的切片位置和大小   后四个是定期切片的目标显示位置大小

11. 状态保存 恢复

save()

restore()

12.动作

translate( x , y ) 将canvas原点的移动到 (x,y)     (save&restore保存初始状态!!!)

rotate( angle ) 顺时针方向旋转坐标轴 angle弧度

scale(x,y) 将图形横向缩放x倍、纵向缩放y倍   ( x、y大于1是放大  小于1为缩放!!!)

13. 全局合成操作

globalCompositeOperation = type; 

    type值有:

    source-over、source-in、source-out、source-atop、destination-over、
    destination-in、destination-out、destination-atop、xor、copy

14. 裁剪

clip  只显示裁剪区域内部区域  (使用save & restore 存储canvas状态!!!)

15. 动画

clearRect() 清空画布

save&restore 保存恢复canvas状态


svg

1. 标签

矩形  rect
圆形  circle
椭圆  ellipse
线  line
折线  polyline
多边形  polygon
路径  path
文本 text

2. 属性

宽度  width
高度 height
css样式 style
填充色 fill
边框颜色 stroke
边框宽度 stroke-width
边框首尾 stroke-linecap
线条样式 stroke-dasharray (需要填写线条宽度以及线条间隙  依据顺序填写一个循环)
线条每一段的起始偏移量 stroke-dashoffet
填充透明度 fill-opacity
边框 stroke-opacity
图形填充规则 fill-rule (nonzero evenodd)
动作 transform (中心点为图像左上角,并且只支持2d变换

HTML5 MathML

MathML指“数学标记语言”,是XML语言的一个子集,用来在web网页,甚至部分软件中显示数学公式。

简言之,就是使用特殊的类似HTML的标记在网页中显示数学公式。


HTML5 拖放(Drag 和 Drop)

1. 拖放的流程

选中 ---> 拖动 ---> 释放

2. 选中

draggable属性:设置元素是否可拖动。语法:<element draggable="true | false | auto" >
true: 可以拖动
false: 禁止拖动
auto: 跟随浏览器定义是否可以拖动

3. 拖动

每一个可拖动的元素,在拖动过程中,都会经历三个过程,拖动开始-->拖动过程中--> 拖动结束

针对对象 事件名称 说明
被拖动的元素 dragstart 在元素开始被拖动时候触发
       |drag	 |  在元素被拖动时反复触发
       |dragend  |	在拖动操作完成时触发

目的地对象 |dragenter| 当被拖动元素进入目的地元素所占据的屏幕空间时触发 |agover |当被拖动元素在目的地元素内时触发 |dragleave| 当被拖动元素没有放下就离开目的地元素时触发

4. 释放

针对对象 事件名称 说明
目的地对象 drop 当被拖动元素在目的地元素里放下时触发,一般需要取消浏览器的默认行为。

5. DataTransfer对象

属性 说明
types 只读属性。它返回一个我们在dragstart事件中设置的拖动数据格式的数组。 格式顺序与拖动操作中包含的数据顺序相同。IE10+、Edge、safari3.1、Firefox3.5+ 和Chrome4以上支持该属性
files 返回拖动操作中的文件列表。包含一个在数据传输上所有可用的本地文件列表。如果拖动操作不涉及拖动文件,此属性是一个空列表。
dropEffect 获取当前选定的拖放操作的类型或将操作设置为新类型。它应该始终设置成effectAllowed的可能值之一【none、move、copy、link】。dragover事件处理程序中针对放置目标来设置dropEffect。
effectAllowed 指定拖放操作所允许的效果。必须是其中之一【 none, copy, copyLink, copyMove, link, linkMove, move, all, uninitialized】默认为uninitialized 表示允许所有的效果。ondragstart处理程序中设置effectAllowed属性
方法 说明
void setData(format, data) 将拖动操作的拖动数据设置为指定的数据和类型。format可以是MIME类型
String getData(format) 返回指定格式的数据,format与setData()中一致
void clearData([format]) 删除给定类型的拖动操作的数据。如果给定类型的数据不存在,此方法不执行任何操作。如果不给定参数,则删除所有类型的数据。
void setDragImage(img, xOffset, yOffset) 指定一副图像,当拖动发生时,显示在光标下方。大多数情况下不用设置,因为被拖动的节点被创建成默认图片。x,y参数分别指示图像的水平、垂直偏移量

HTML5 Geolocation(地理定位)

地理位置 API 通过window.navigator.geolocation提供

1. 获取当前定位

navigator.geolocation.getCurrentPosition(success, error, options)
success:成功的回调函数(必须)
error:错误的回调函数
options:参数对象,通过该对象参数设置最长可接受的定位返回时间,等待请求的时间和是否精准定位。

2. success(Geoposition)

Geoposition 对象属性

accuracy 定位精准度,单位 m
altitude 海拔
altitudeAccuracy 海拔精准度,单位 m
heading 方向
latitude 纬度
longitude 经度
speed 速度
timestamp 响应的日期/时间

3. error(PositionError)

PositionError 对象属性
用户拒绝 code === 1
获取不到 code === 2
连接超时 code === 3

4. config

const config = {
  // 是否需要高精度位置 默认为false
  enableHighAccuracy: true,
  // 请求超时时间,默认为 infinity,单位ms
  timeout: 1000,
  // 位置信息过期时间,设置为0就无条件获取新的地理位置信息,默认为 0,单位 ms
  maximumAge: 0
};

5. watchPosition 监听位置变化

navigator.geolocation.watchPosition(); 参数与 getCurrentPosition 相同

用于注册监听器,在设备的地理位置发生改变的时候自动被调用

在 watchPosition 方法定义使用后,则会不停的获取用户的地理位置信息,不停的更新用户的位置信息

6. clearWatch

clearWatch() - 停止 watchPosition() 方法


HTML5 新的 Input 类型

color 用在input字段主要用于选取颜色
date 允许你从一个日期选择器选择一个日期
datetime 允许你选择一个日期(UTC 时间)
datetime-local 允许你选择一个日期和时间 (无时区).
email 用于应该包含 e-mail 地址的输入域
month 允许你选择一个月份
number 用于应该包含数值的输入域
range 用于应该包含一定范围内数字值的输入域
search 用于搜索域,比如站点搜索或 Google 搜索
tel 定义输入电话号码字段
time 允许你选择一个时间
url 用于应该包含 URL 地址的输入域
week 允许你选择周和年


HTML5 新的表单元素

<datalist>	规定输入域的选项列表
<keygen>	规定用于表单的密钥对生成器字段。
<output>	定义不同类型的输出,比如脚本的输出。


HTML5 新的表单属性

1. <form>新属性

autocomplete 规定 form 或 input 域应该拥有自动完成功能

novalidate  Boolean 规定在提交表单时不应该验证 form 或 input 域

2. <input>新属性

属性 说明
autocomplete 规定 form 或 input 域应该拥有自动完成功能
autofocus Boolean 规定在页面加载时,域自动地获得焦点
form 规定输入域所属的一个或多个表单
formaction 用于描述表单提交的URL地址
会覆盖<form> 元素中的action属性
注意: 用于 type="submit" 和 type="image"
formenctype 描述了表单提交到服务器的数据编码
只对form表单中 method="post" 表单
覆盖 form 元素的 enctype 属性
主要: 该属性与 type="submit" 和 type="image" 配合使用
formmethod 定义了表单提交的方式(覆盖了 <form> 元素的 method 属性
注意:该属性可以与 type="submit" 和 type="image" 配合使用
formnovalidate Boolean 描述了 <input> 元素在表单提交时无需被验证
覆盖 <form> 元素的novalidate属性
注意:formnovalidate 属性与type="submit一起使用
formtarget 指定一个名称或一个关键字来指明表单提交数据接收后的展示
覆盖 <form>元素的target属性
注意: formtarget 属性与type="submit" 和 type="image"配合使用.
height 与 width 规定用于 image 类型的 <input> 标签的图像高度和宽度
注意: height 和 width 属性只适用于 image 类型的<input> 标签
list 规定输入域的 datalist。datalist 是输入域的选项列表
min 与 max 用于为包含数字或日期的 input 类型规定限定(约束)
注意: min、max 和 step 属性适用于以下类型的 <input> 标签:date pickers、number 以及 range。
multiple Boolean 规定<input> 元素中可选择多个值
注意: multiple 属性适用于以下类型的 <input> 标签:email 和 file
pattern (regexp) 描述了一个正则表达式用于验证 <input> 元素的值
注意:pattern 属性适用于以下类型的 <input> 标签: text, search, url, tel, email, 和 password
placeholder 提供一种提示(hint),描述输入域所期待的值
required Boolean 规定必须在提交之前填写输入域(不能为空)
注意:required 属性适用于以下类型的 <input> 标签:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file
step 输入域规定合法的数字间隔

HTML5 应用程序缓存

1. 优势

离线浏览 - 用户可在应用离线时使用它们
速度 - 已缓存资源加载得更快
减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源

2. 启用缓存

在文档的<html> 标签中包含 manifest 属性

每个指定了 manifest 的页面在用户对其访问时都会被缓存。

如果未指定 manifest 属性,则页面不会被缓存(除非在 manifest 文件中直接指定了该页面)

manifest 文件的建议的文件扩展名是:".appcache"

请注意,manifest 文件需要配置正确的 MIME-type,即 "text/cache-manifest"。必须在 web 服务器上进行配置

3. Manifest 文件

CACHE MANIFEST(必需) - 在此标题下列出的文件将在首次下载后进行缓存
NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

4. 更新缓存

  1. 一旦应用被缓存,它就会保持缓存直到发生下列情况:
用户清空浏览器缓存
manifest 文件被修改(参阅下面的提示)
由程序来更新应用缓存

5. 注意

一旦文件被缓存,则浏览器会继续展示已缓存的版本,即使您修改了服务器上的文件。

为了确保浏览器更新缓存,您需要更新 manifest 文件。

浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)


HTML5 Web Workers

什么是 Web Worker?

当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。

web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。

您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。


HTML5 服务器发送事件(Server-Sent Events)

Server-Sent 事件 - 单向消息传递

Server-Sent 事件指的是网页自动获取来自服务器的更新。

以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。

例子:Facebook/Twitter 更新、股价更新、新的博文、赛事结果等。


HTML5 WebSocket

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。

在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

1. 创建 WebSocket 对象

var Socket = new WebSocket(url, [protocol] );

以上代码中的第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。

2. WebSocket 属性

属性 描述
Socket.readyState 只读属性 readyState 表示连接状态,可以是以下值:
0 - 表示连接尚未建立。
1 - 表示连接已建立,可以进行通信。
2 - 表示连接正在进行关闭。
3 - 表示连接已经关闭或者连接不能打开。
Socket.bufferedAmount 只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。

3. WebSocket 事件

事件 事件处理程序 描述
open Socket.onopen 连接建立时触发
message Socket.onmessage 客户端接收服务端数据时触发
error Socket.onerror 通信发生错误时触发
close Socket.onclose 连接关闭时触发

4. WebSocket 方法

方法 描述
Socket.send() 使用连接发送数据
Socket.close() 关闭连接