HTML5简介
HTML5是HTML最新的修订版本,于2014年10月由万维联盟(W3C)完成标准指定。
HTML5的设计目的是为了在移动设备上支持多媒体,并且完全支持CSS3
HTML5新元素
新多媒体元素
新表单元素
新的语义和结构元素
HTML5提供了新的元素来创建更好的页面结构
已移除的元素
以下的 HTML 4.01 元素在HTML5中已经被删除
HTML5 Canvas
什么是canvas?
你可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。
创建一个画布
<canvas id="myCanvas" width="200" height="100"></canvas>
<!-- 此标签需要指定 id 属性和 width 与 height 属性 -->
注意:默认情况下
使用 JavaScript 来绘制图像
canvas 元素本身事没有绘图能力的,需要由Javascipt来绘图
// 绘制一个矩形
var c=document.getElementById("myCanvas"); // 找到 <canvas> 元素
var ctx=c.getContext("2d"); // 创建 context 对象
ctx.fillStyle="#FF0000"; // 设置fillStyle属性
ctx.fillRect(0,0,150,75); // fileRect方法定义了举行当前的填充方式
getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法
Canvas 坐标
canvas - 是一个二维网格
canvas - 的左上角坐标为(0,0)
上面的 fillRect(0,0,150,75) 意思是:在画布上(0,0)的位置为起始点,绘制 150x75 的矩形
Canvas 路径
使用Canvas画直线,需要使用两个方法:
- moveTo(x,y) 定义线条开始坐标
- lineTo(x,y) 定义线条结束坐标
再加上一个启动绘制的方法 stroke
// 绘制直线
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.moveTo(0,0); // moveTo(x,y) 定义线条开始坐标
ctx.lineTo(200,100); // lineTo(x,y) 定义线条结束坐标
ctx.stroke(); // 使用 stroke 方法来绘制线条
使用Canvas画圆,需要使用一个方法:
- arc(x, y, radius, startAngle, endAngle, counterclockwise) 定义一个中心位置在(x,y),半径为radius,弧度为startAngle,结束弧度为counterclockwise的圆(从三点钟方向开始绘制)
//绘制圆形
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath(); // 创建一个新的线条
ctx.arc(95,50,40,0,2*Math.PI); //画一个中心位置在(95,50),半径为40,弧度为0,结束弧度为2PI的圆
ctx.stroke();
Canvas 文本
使用canvas绘制文本,需要使用的属性和方法
font 定义地体
fillText(text,x,y) - 在convas上绘制实心的文本
strokeText(text,x,y) - 在canvas上绘制空心的文本
//绘制文本
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.strokeText("Hello World",10,50);
Canvas 渐变
渐变可以填充在矩形,圆形,线条,文本等等,各种形状都可以自己定义不同的颜色
以下有两种不同的方法来设置Canvas渐变:
- createLinearGradient(x,y,x1,y1) - 创建线性渐变
- createRadialGradient(x,y,r,x1,y1,r1) - 创建一个径向/圆渐变
当我们使用渐变对象,必须使用两种或两种以上的停止颜色。
addColorStop()方法指定颜色停止,参数使用坐标来描述,可以是0至1
使用渐变,设置fillStyle或strokeStyle的值为 渐变,然后绘制形状,如矩形,文本,或一条线。
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
// 创建渐变
var grd=ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
// 填充渐变
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);
Canvas 图像
把一幅图像放置到画布上,使用以下方法
- drawImage(image,x,y)
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");
ctx.drawImage(img,10,10);
HTML5 SVG
SVG 定义为可缩放矢量图形。
HTML5 支持内联 SVG。
HTML 元素是 SVG 图形的容器。
SVG 有多种绘制路径、框、圆、文本和图形图像的方法。
什么是SVG
- SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
- SVG 用于定义用于网络的基于矢量的图形
- SVG 使用 XML 格式定义图形
- SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失
- SVG 是万维网联盟的标准
SVG优势
与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:
- SVG 图像可通过文本编辑器来创建和修改
- SVG 图像可被搜索、索引、脚本化或压缩
- SBG 是可伸缩的
- SVG 图像可在任何分辨率下被高质量地打印
- SVG 可在图像质量不下降的情况下被放大
把 SVG 直接嵌入 HTML 页面
在 HTML5 中,您能够将 SVG 元素直接嵌入 HTML 页面中
<!-- 嵌入一个边框为黑色,填充为红色的圆形 -->
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
SVG 与 Canvas 两者间的区别
SVG 是一种使用 XML 描述 2D 图形的语言。
Canvas 通过 JavaScript 来绘制 2D 图形。
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。
在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
Canvas 是逐像素进行渲染的。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
Canvas 与 SVG 的比较
下表列出了 canvas 与 SVG 之间的一些不同之处
Canvas | SVG |
---|---|
依赖分辨率不支持事件处理器弱的文本渲染能力能够以 .png 或 .jpg 格式保存结果图像最适合图像密集型的游戏,其中的许多对象会被频繁重绘 | 不依赖分辨率支持事件处理器最适合带有大型渲染区域的应用程序(比如谷歌地图)复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)不适合游戏应用 |
HTML5 MathML
HTML5 可以在文档中使用 MathML 元素,对应的标签是 。
MathML 是数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置标语言。
实例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<msup><mi>a</mi><mn>2</mn></msup>
<mo>+</mo>
<msup><mi>b</mi><mn>2</mn></msup>
<mo>=</mo>
<msup><mi>c</mi><mn>2</mn></msup>
</mrow>
</math>
</body>
</html>
效果

HTML5 拖放(Drag 和 Drop)
拖放
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。
在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<style type="text/css">
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script>
function allowDrop(ev)
{
ev.preventDefault();
}
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<p>拖动 RUNOOB.COM 图片到矩形框中:</p>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<img decoding="async" loading="lazy" id="drag1" src="/images/logo.png" draggable="true" ondragstart="drag(event)" width="336" height="69">
</body>
</html>
设置元素为可拖放
为了是元素可拖动,把 draggable 属性设置为 true
<img draggable="true">
拖放什么 - ondragstart 和 setData()
然后,规定当元素被拖动时,会发生什么。
在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。
dataTransfer.setData() 方法设置被拖数据的数据类型和值
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}
Text 是一个 DOMString 表示要添加到 drag object 的拖动数据的类型。值是可拖动元素的 id ("drag1")。
放到何处 - ondragover
ondragover 事件规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
这要通过调用 ondragover 事件的 event.preventDefault() 方法
event.preventDefault()
进行放置 - ondrop
当放置被拖数据时,会发生 drop 事件。
在上面的例子中,ondrop 属性调用了一个函数,drop(event)
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
代码解释:
- 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
- 通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
- 被拖数据是被拖元素的 id ("drag1")
- 把被拖元素追加到放置元素(目标元素)中
HTML5 Geolocation(地理定位)
HTML5 Geolocation(地理定位)用于定位用户的位置
定位用户的位置
HTML5 Geolocation API 用于获得用户的地理位置。
鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的
HTML5 - 使用地理定位
使用 getCurrentPosition() 方法来获得用户的位置
getCurrentPosition() 方法 - 返回数据
属性 | 描述 |
---|---|
coords.latitude | 十进制数的纬度 |
coords.longitude | 十进制数的经度 |
coords.accuracy | 位置精度 |
coords.altitude | 海拔,海平面以上以米计 |
coords.altitudeAccuracy | 位置的海拔精度 |
coords.heading | 方向,从正北开始以度计 |
coords.speed | 速度,以米/每秒计 |
timestamp | 响应的日期/时间 |
HTML5 Video(视频)
HTML5 提供了播放视频文件的标准
<video width="320" height="240" controls>
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
您的浏览器不支持Video标签。
</video>
注:
HTML5
HTML5
其中的方法用于播放、暂停以及加载等。其中的属性(比如时长、音量等)可以被读取或设置。其中的 DOM 事件能够通知您,比方说,
HTML5 Video 标签
HTML5 Audio(音频)
HTML5 提供了播放音频文件的标准
<audio controls>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
您的浏览器不支持 audio 元素。
</audio>
注:
HTML5 Audio 标签
HTML5 Input 类型
HTML5 新的 Input 类型
HTML5 拥有多个新的表单输入类型。这些新特性提供了更好的输入控制和验证。
本章全面介绍这些新的输入类型:
- color
- date
- datetime
- datetime-local
- month
- number
- range
- search
- tel
- time
- url
- week
注意:并不是所有的主流浏览器都支持新的input类型,不过您已经可以在所有主流的浏览器中使用它们了。即使不被支持,仍然可以显示为常规的文本域。
Input 类型:color
color 类型用在input字段主要用于选取颜色
选择你喜欢的颜色: <input type="color" name="favcolor">
Input 类型:date
date 类型允许你从一个日期选择器选择一个日期
生日: <input type="date" name="bday">
Input 类型:datetime
datetime 类型允许你选择一个日期(UTC 时间)
生日 (日期和时间): <input type="datetime" name="bdaytime">
Input 类型:datetime-local
datetime-local 类型允许你选择一个日期和时间 (无时区)
生日 (日期和时间): <input type="datetime-local" name="bdaytime">
Input 类型:email
email 类型用于应该包含 e-mail 地址的输入域
E-mail: <input type="email" name="email">
Input 类型:month
month 类型允许你选择一个月份
生日 (月和年): <input type="month" name="bdaymonth">
Input 类型:number
number 类型用于应该包含数值的输入域,您还能够设定对所接受的数字的限定
数量 ( 1 到 5 之间 ): <input type="number" name="quantity" min="1" max="5">
使用下面的属性来规定对数字类型的限定
属性 | 描述 |
---|---|
disabled | 规定输入字段是禁用的 |
max | 规定允许的最大值 |
maxlength | 规定输入字段的最大字符长度 |
min | 规定允许的最小值 |
pattern | 规定用于验证输入字段的模式 |
readonly | 规定输入字段的值无法修改 |
required | 规定输入字段的值是必需的 |
size | 规定输入字段中的可见字符数 |
step | 规定输入字段的合法数字间隔 |
value | 规定输入字段的默认值 |
Input 类型:search
search 类型用于搜索域,比如站点搜索或 Google 搜索
Search Google: <input type="search" name="googlesearch">
Input 类型:tel
tel 类型用于输入电话号码
电话号码: <input type="tel" name="usrtel">
Input 类型:time
time 类型允许你选择一个时间
选择时间: <input type="time" name="usr_time">
Input 类型:url
url 类型用于应该包含 URL 地址的输入域,在提交表单时,会自动验证 url 域的值
添加您的主页: <input type="url" name="homepage">
Input 类型:week
week 类型允许你选择周和年
选择周: <input type="week" name="week_year">
HTML5 表单元素
HTML5 新的表单元素
HTML5 有以下新的表单元素:
HTML5
<input list="browsers">
<datalist id="browsers">
<option value="Internet Explorer">
<option value="Firefox">
<option value="Chrome">
<option value="Opera">
<option value="Safari">
</datalist>
HTML5
元素的作用是提供一种验证用户的可靠方法。
标签规定用于表单的密钥对生成器字段。 当提交表单时,会生成两个键,一个是私钥,一个公钥。
私钥(private key)存储于客户端,公钥(public key)则被发送到服务器。公钥可用于之后验证用户的客户端证书(client certificate)
<form action="demo_keygen.asp" method="get">
用户名: <input type="text" name="usr_name">
加密: <keygen name="security">
<input type="submit">
</form>
HTML5
<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0
<input type="range" id="a" value="50">100 +
<input type="number" id="b" value="50">=
<output name="x" for="a b"></output>
</form>
HTML5 表单属性
HTML5 新的表单属性
HTML5 的