上一篇
html5网络课程
- 行业动态
- 2025-05-07
- 3151
HTML5网络课程覆盖基础语法、CSS3样式、JavaScript交互及响应式设计,通过实战项目手把手教学,案例丰富,适合零基础至进阶学习者,助你快速掌握
HTML5 网络课程
HTML5 基础语法
描述 | 示例 | |
---|---|---|
<!DOCTYPE html> | 文档类型声明,告知浏览器使用 HTML5 标准解析文档 | <!DOCTYPE html> |
<html> | HTML 文档的根元素 | <html></html> |
<head> | 包含文档的元数据,如标题、字符编码等 | <head><title>页面标题</title></head> |
<body> | 文档的主体部分,包含可见的页面内容 | <body>页面内容</body> |
字符编码
- 推荐使用
<meta charset="UTF-8">
来指定字符编码为 UTF-8,确保页面能正确显示各种字符。
结构元素
<header>
:定义文档或节的页眉。<nav>
:定义导航链接的部分。<section>
:定义文档中的节,如章节、段落等。<article>
:定义独立的文章内容。<footer>
:定义文档或节的页脚。
HTML5 多媒体支持
描述 | 示例 | |
---|---|---|
<audio> | 嵌入音频内容 | <audio src="audio.mp3" controls></audio> |
<video> | 嵌入视频内容 | <video src="video.mp4" controls width="600"></video> |
属性
controls
:显示播放控件,如播放、暂停、音量调节等。autoplay
:自动播放媒体。loop
:循环播放媒体。muted
:静音播放。
事件
ended
:媒体播放结束时触发。timeupdate
:媒体播放进度改变时触发。
HTML5 Canvas 绘图
方法和属性 | 描述 | 示例 |
---|---|---|
getContext() | 获取绘图上下文,如 2d 或 3d (目前主要支持 2d ) | const ctx = canvas.getContext('2d'); |
fillRect(x, y, width, height) | 绘制填充矩形 | ctx.fillRect(10, 10, 100, 50); |
strokeRect(x, y, width, height) | 绘制矩形边框 | ctx.strokeRect(120, 10, 100, 50); |
beginPath() | 开始一条新的路径 | ctx.beginPath(); |
moveTo(x, y) | 将画笔移动到指定的坐标点 | ctx.moveTo(50, 50); |
lineTo(x, y) | 从当前点绘制一条直线到指定的坐标点 | ctx.lineTo(150, 50); |
stroke() | 绘制路径的轮廓 | ctx.stroke(); |
fill() | 填充路径 | ctx.fill(); |
closePath() | 关闭当前路径 | ctx.closePath(); |
arc(x, y, radius, startAngle, endAngle, isAnticlockwise) | 绘制圆形或弧形 | ctx.arc(100, 100, 50, 0, Math.PI 2); |
fillText(text, x, y) | 在指定位置填充文本 | ctx.fillText('Hello', 50, 50); |
font | 设置字体样式,如 font = '20px Arial' | ctx.font = '20px Arial'; |
fillStyle | 设置填充颜色,如 fillStyle = 'red' | ctx.fillStyle = 'red'; |
strokeStyle | 设置描边颜色,如 strokeStyle = 'blue' | ctx.strokeStyle = 'blue'; |
渐变
- 线性渐变:通过
createLinearGradient(x0, y0, x1, y1)
创建线性渐变对象,然后使用addColorStop(position, color)
添加颜色停止点。const gradient = ctx.createLinearGradient(0, 0, 200, 0); gradient.addColorStop(0, 'red'); gradient.addColorStop(1, 'blue'); ctx.fillStyle = gradient; ctx.fillRect(0, 0, 200, 100);
- 径向渐变:通过
createRadialGradient(x0, y0, r0, x1, y1, r1)
创建径向渐变对象,使用方法与线性渐变类似。
图案填充
- 通过
createPattern(image, repetition)
创建图案填充对象,image
是一个<image>
元素或已加载的图像对象,repetition
表示平铺方式,如'repeat'
。const img = new Image(); img.src = 'pattern.png'; img.onload = function() { const pattern = ctx.createPattern(img, 'repeat'); ctx.fillStyle = pattern; ctx.fillRect(0, 0, 200, 100); };
阴影效果
- 阴影颜色:通过
shadowColor
属性设置阴影颜色,如shadowColor = 'rgba(0, 0, 0, 0.5)'
。 - 阴影偏移量:通过
shadowOffsetX
和shadowOffsetY
属性设置阴影在 x 轴和 y 轴方向的偏移量,单位为像素。shadowOffsetX = 5
表示阴影向右偏移 5 像素,shadowOffsetY = 5
表示阴影向下偏移 5 像素。 - 阴影模糊半径:通过
shadowBlur
属性设置阴影的模糊半径,值越大阴影越模糊。shadowBlur = 10
。
保存与恢复状态
- 保存状态:通过
save()
方法保存当前的绘图状态,包括当前的绘图上下文属性(如颜色、线宽、字体等)、变换矩阵、裁剪区域等,可以将当前状态压入一个栈中,以便后续恢复,在进行一些复杂的绘图操作之前,先调用save()
方法保存当前状态,以便在操作完成后可以恢复到之前的状态。 - 恢复状态:通过
restore()
方法从栈中弹出最近保存的状态,并将绘图上下文恢复到该状态,在完成复杂的绘图操作后,调用restore()
方法可以撤销之前的保存操作,恢复到之前的状态,注意,restore()
方法必须与save()
方法成对使用,否则可能会导致状态栈的不平衡,如果调用restore()
方法时栈为空,将会引发错误。
变形操作
- 平移:通过
translate(dx, dy)
方法将绘图上下文的原点在 x 轴方向平移dx
像素,在 y 轴方向平移dy
像素。translate(50, 50)
将原点向右平移 50 像素,向下平移 50 像素,平移操作会影响后续的所有绘图操作,直到再次调用translate()
方法或进行其他变形操作。 - 旋转:通过
rotate(angle)
方法将绘图上下文绕原点旋转angle
弧度。rotate(Math.PI / 2)
将绘图上下文逆时针旋转 90 度,旋转操作会影响后续的所有绘图操作,直到再次调用rotate()
方法或进行其他变形操作,需要注意的是,旋转的角度是以弧度为单位的,而不是度数,如果要将度数转换为弧度,可以使用公式弧度 = 度数 (Math.PI / 180)
。 - 缩放:通过
scale(sx, sy)
方法将绘图上下文在 x 轴方向缩放sx
倍,在 y 轴方向缩放sy
倍。scale(2, 2)
将绘图上下文在 x 轴和 y 轴方向都放大 2 倍,缩放操作会影响后续的所有绘图操作,直到再次调用scale()
方法或进行其他变形操作,如果只提供一个参数,则表示在 x 轴和 y 轴方向进行相同的缩放。scale(2)
等同于scale(2, 2)
。 - 组合变形:可以通过连续调用多个变形方法来实现复杂的变形效果,先进行平移操作,再进行旋转操作,最后进行缩放操作,变形操作的顺序会影响最终的结果,因为每个变形操作都是基于前一个变形操作的结果进行的,先平移再旋转与先旋转再平移得到的结果是不同的,在进行组合变形时,需要注意变形的顺序和逻辑关系。
裁剪区域
- 创建裁剪区域:通过
clip()
方法可以根据当前的路径创建一个裁剪区域,只有在这个裁剪区域内的绘图操作才会被显示出来,裁剪区域之外的部分将被裁剪掉,先绘制一个矩形路径,然后调用clip()
方法,那么后续的绘图操作只有在这个矩形区域内才会显示出来。 - 取消裁剪区域:通过
beginPath()
方法可以清除当前的路径和裁剪区域,恢复到默认的无裁剪状态,在调用beginPath()
方法之后,之前的裁剪区域将不再生效,所有的绘图操作都将在整个画布上进行显示,需要注意的是,beginPath()
方法不仅会清除裁剪区域,还会清除当前的路径,所以在使用beginPath()
方法之前,如果有未完成的路径操作,需要先调用closePath()
方法或者stroke()
、fill()
方法来完成路径的绘制。
文本测量
- 测量文本宽度:通过
measureText(text)
方法可以测量给定文本的宽度,该方法返回一个TextMetrics
对象,其中包含了文本的宽度信息,要测量字符串 “Hello” 的宽度,可以使用以下代码:const metrics = ctx.measureText('Hello'); const width = metrics.width; console.log(width); // 输出文本的宽度
- 字体属性:在测量文本宽度之前,需要先设置好字体属性,如字体大小、字体族等,可以通过
font
属性来设置字体样式,ctx.font = '20px Arial'
,字体属性的设置会影响文本的测量结果和绘制效果,如果未设置字体属性,则使用默认的字体样式。
图像处理
- 绘制图像:通过
drawImage(image, dx, dy)
方法可以将图像绘制到画布上。image
是一个<image>
元素或已加载的图像对象,dx
和dy
是图像在画布上的左上角坐标,要将一个图像绘制到画布的 (50, 50) 位置,可以使用以下代码:const img = new Image(); img.src = 'image.jpg'; img.onload = function() { ctx.drawImage(img, 50, 50); };
- 图像裁剪与缩放:
drawImage()
方法还可以接受更多的参数来实现图像的裁剪和缩放。drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
可以从图像中裁剪出一个矩形区域(左上角坐标为 (sx, sy),宽度为sw
,高度为sh
),然后将裁剪后的图像绘制到画布上的指定位置(左上角坐标为 (dx, dy)),并可以指定绘制的宽度dw
和高度dh
来实现缩放,如果只提供前三个参数(image
,dx
,dy
),则表示将整个图像绘制到画布上的指定位置,不进行裁剪和缩放,如果提供了前五个参数(image
,sx
,sy
,sw
,sh
,dx
,dy
),则表示从图像中裁剪出指定区域并绘制到画布上,不进行缩放,如果提供了全部八个参数(image
,sx
,sy
,sw
,sh
,dx
,dy
,dw
,dh
),则表示从图像中裁剪出指定区域并绘制到画布上,同时进行缩放,要将图像的一部分裁剪并缩放后绘制到画布上,可以使用以下代码:const img = new Image(); img.src = 'image.jpg'; img.onload = function() { // 从图像中裁剪出一个宽度为 100、高度为 100 的区域,从 (50, 50) 开始 const sx = 50, sy = 50, sw = 100, sh = 100; // 将裁剪后的区域绘制到画布上的 (100, 100) 位置,并缩放为宽度 200、高度 200 const dx = 100, dy = 100, dw = 200, dh = 200; ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh); };
- 图像平滑:在绘制图像时,可以通过
imageSmoothingEnabled
属性来控制图像是否使用平滑算法进行缩放,该属性是一个布尔值,默认值为false
,如果设置为true
,则在缩放图像时会使用平滑算法,使图像看起来更加清晰,要在缩放图像时启用平滑功能,可以使用以下代码:ctx.imageSmoothingEnabled = true; ctx.drawImage(img, 0, 0, 300, 300); // 缩放图像并启用平滑功能
合成操作
- 全局合成操作:通过
globalCompositeOperation
属性可以设置全局的合成操作,用于确定新绘制的图形如何与已有的画布内容进行合成,常见的合成操作包括source-over
(默认值,新图形覆盖在已有内容之上)、destination-over
(新图形被已有内容覆盖)、lighter
(新图形和已有内容的颜色值相加,显示更亮的颜色)、copy
(直接复制新图形,忽略已有内容)等,要将新绘制的红色矩形与已有的蓝色矩形进行合成,并且使用lighter
合成操作,可以使用以下代码:ctx.fillStyle = 'red'; ctx.globalCompositeOperation = 'lighter'; ctx.fillRect(50, 50, 100, 100); // 绘制红色矩形,与已有内容进行合成
- 像素级合成操作:除了全局合成操作外,Canvas API 还提供了一些像素级的合成操作函数,如
globalAlpha
、globalCompositeOperation
、createPattern()
等,这些函数可以更精细地控制图形的合成效果,通过设置globalAlpha
属性可以控制图形的透明度,从而影响合成效果,要将新绘制的图形设置为半透明,并与已有内容进行合成,可以使用以下代码:ctx.fillStyle = 'red'; ctx.globalAlpha = 0.5; // 设置透明度为 0.5 ctx.fillRect(50, 50, 100, 100); // 绘制半透明红色矩形,与已有内容进行合成
动画绘制
- 请求动画帧:使用
requestAnimationFrame(callback)
方法可以请求浏览器在下一个动画帧到来时调用指定的回调函数,这个方法通常用于创建动画效果,因为它可以在浏览器准备好绘制下一帧时自动调用回调函数,从而提高动画的性能和流畅度,要创建一个