HTML学习笔记(四) Canvas 上

简介: HTML学习笔记(四) Canvas

前言


<canvas> 标签用于定义图形容器,容器本身是没有画图能力的,但我们可以使用脚本来绘制图形


目录


1、创建画布

2、创建画笔

3、绘制矩形

4、绘制路径

5、绘制文字

6、添加样式

7、创建图片


正文


1、创建画布


在 HTML 中,使用 <canvas> 标签可以创建一个矩形画布,这个画布的默认宽高为 300*150


如果要改变画布的大小,建议通过内联样式或者脚本进行设置,否则很容易会出现画布扭曲的情况


<!DOCTYPE html>
<html>
<head>
    <title>Canvas Demo</title>
</head>
<body>
    <canvas id="graph" width="300" height="300">您的浏览器不支持 canvas 标签</canvas>
</body>
</html>


2、创建画笔


在 JavaScript 中,使用 getContext() 方法可以创建一个渲染上下文对象


这个对象就相当于是这个画布的画笔,拥有一系列用于画图的方法


<script>
    var canvas = document.getElementById('graph')
    var context = canvas.getContext('2d')
    // 开始画图
</script>


3、绘制矩形


Canvas 只支持一种原生图形的绘制方法,那就是矩形,其它图形都必须通过路径生成


  • strokeRect(x, y, width, height):绘制一个矩形的边框
  • fillRect(x, y, width, height)    :绘制一个填充的矩形
  • clearRect(x, y, width, height)  :清空指定的矩形区域


其中,参数 xy 定义矩形左上角的坐标,参数 widthheight 定义矩形的宽高

<script>
    var cvs = document.getElementById('graph')
    var ctx = cvs.getContext('2d')
    ctx.strokeRect(10, 10, 100, 100)
</script>


4、绘制路径


图形的基本元素是路径,路径是线段和点的集合,在 Canvas 中每一个路径都是闭合的


  • beginPath()  :新建一条路径
  • closePath()  :结束一条路径,它会从当前点到起始点拉一条直线,使得路径闭合
  • moveTo(x, y):将画笔移动到指定坐标
  • stroke():绘制图形(闭合路径)的边框
  • fill()    :填充图形(闭合路径)的内容,如果路径没有闭合,首先闭合路径


  • lineTo(x, y):创建一条直线路径,从 当前坐标(x, y) 连接一条直线
<script>
    var cvs = document.getElementById('graph')
    var ctx = cvs.getContext('2d')
    ctx.beginPath()
    ctx.moveTo(150, 90)
    ctx.lineTo(60, 210)
    ctx.lineTo(240, 210)
    ctx.closePath() // 结束一条路径,从当前点到起始点拉一条直线,使得路径闭合
    ctx.stroke()    // 绘制图形(闭合路径)的边框
</script>

<script>
    var cvs = document.getElementById('graph')
    var ctx = cvs.getContext('2d')
    ctx.beginPath()
    ctx.moveTo(150, 90)
    ctx.lineTo(60, 210)
    ctx.lineTo(240, 210)
    ctx.fill() // 填充图形(闭合路径)的内容,如果路径没有闭合,首先闭合路径
</script>


  • arc(x, y, r, startAngle, endAngle, anticlockwise):创建一段圆弧路径
  • 以 (x, y) 为圆心,以 r 为半径,从 startAngle 开始,到 endAngle 结束,画一段圆弧
  • 如果 anticlockwise 为 true,则逆时针画,如果 anticlockwise 为 false,则顺时针画

  • arcTo(x1, y1, x2, y2, radius):创建一段圆弧路径
    首先我们从 当前坐标(x1, y1) 画一条直线,然后想象从 (x1, y1)(x2, y2) 画一条直线
    最后画一段半径为 radius 并且与以上两条直线相切的圆弧

<script>
    var cvs = document.getElementById('graph')
    var ctx = cvs.getContext('2d')
    ctx.beginPath()
    ctx.arc(150, 150, 100, Math.PI*1.5, Math.PI*0.5, true)
    ctx.fill()
    ctx.beginPath()
    ctx.moveTo(50, 50)
    ctx.arcTo(250, 50, 250, 250, 100)
    ctx.stroke()
</script>


  • quadraticCurveTo(cpx, cpy, x, y):绘制二次贝塞尔曲线
  • 其中,(cpx, cpy) 表示控制点的坐标,(x, y) 表示结束点的坐标


  • bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y):绘制三次贝塞尔曲线
  • (cp1x, cp1y) 是第一个控制点的坐标,(cp2x, cp2y) 是第二个控制点的坐标,(x, y) 是结束点的坐标

<script>
    var cvs = document.getElementById('graph')
    var ctx = cvs.getContext('2d')
    ctx.beginPath()
    ctx.moveTo(25, 100)
    ctx.quadraticCurveTo(75, 50, 125, 100)
    ctx.stroke()
    ctx.beginPath()
    ctx.moveTo(175, 250)
    ctx.bezierCurveTo(205, 200, 245, 200, 275, 250)
    ctx.stroke()
</script>

5、绘制文字


我们可以使用以下两个方法绘制文字:

  • strokeText(text, x, y):在指定坐标 (x, y) 处创建空心文本 text
  • fillText(text, x, y)    :在指定坐标 (x, y) 处创建实心文本 text


还能使用以下属性指定文字样式:


  • font:指定文本样式,与 CSS font 属性取值相同,默认值为 10px sans-serif
  • textAlign:指定文本对齐选项

若为 start  ,则表示文本在指定的位置开始(默认值)

若为 end      ,则表示文本在指定的位置结束

若为 left    ,则表示文本左对齐

若为 right  ,则表示文本右对齐

若为 center,则表示文本的中心在指定的位置


  • textBaseline:指定基线对齐选项


若为 alphabetic  ,则表示文本基线是字母基线(默认值)

若为 ideographic,则表示文本基线是表意基线

若为 hanging        ,则表示文本基线是悬挂基线

若为 top      ,则表示文本基线是 <em> 方框的顶端

若为 middle,则表示文本基线是 <em> 方框的中心

若为 bottom,则表示文本基线是 <em> 方框的底端


  • direction:指定文本方向


若为 inherit,则表示继承父元素(默认值)

若为 ltr,则表示文本方向从左到右

若为 rtl,则表示文本方向从右到左

<script>
    var cvs = document.getElementById('graph')
    var ctx = cvs.getContext('2d')
    ctx.font = '50px sans-serif'
    ctx.strokeText('Hello', 80, 160)
</script>


目录
相关文章
|
3月前
|
移动开发 前端开发 JavaScript
基于 HTML5 和 Canvas 开发的在线图片编辑器
基于 HTML5 和 Canvas 开发的在线图片编辑器
69 0
|
4月前
|
移动开发 前端开发 API
HTML5 Canvas渐进填充与透明
HTML5 Canvas渐进填充与透明
127 7
|
4月前
|
移动开发 前端开发 JavaScript
HTML5 Canvas鼠标与键盘事件
HTML5 Canvas鼠标与键盘事件
53 5
|
4月前
|
移动开发 前端开发 JavaScript
HTML5 Canvas平移,放缩,旋转演示
HTML5 Canvas平移,放缩,旋转演示
42 4
|
4月前
|
移动开发 前端开发 API
HTML5 Canvas 填充与描边(Fill And Stroke)
HTML5 Canvas 填充与描边(Fill And Stroke)
72 3
|
7天前
|
XML 移动开发 前端开发
HTML5 SVG和canvas的性能探讨
HTML5 中的 SVG(可缩放矢量图形)和 Canvas(画布)分别用于网页图形绘制。SVG 基于矢量图形,使用 XML 描述,适合静态或少量动态内容(如图标、图表),易于编辑且保持高分辨率;Canvas 则基于位图,通过 JavaScript 绘制,更适合快速更新大量图形的场景(如游戏、动态动画),但在复杂图形计算时可能遇到性能瓶颈。总体而言,SVG 适用于静态和少量动态内容,而 Canvas 更适合高频率更新和性能要求高的场景。
|
7天前
|
移动开发 前端开发 JavaScript
HTML5 Canvas详解及应用
HTML5 Canvas 允许通过 JavaScript 在网页上动态绘制图形、动画等视觉内容。首先在 HTML 中定义 `&lt;canvas&gt;` 元素,并通过 JavaScript 获取画布上下文进行绘制。常见方法包括绘制矩形、路径、圆形和文本,以及处理图像和创建动画效果。适用于游戏开发、数据可视化、图像编辑和动态图形展示等多种应用场景。需要注意性能优化、无状态绘制及自行处理事件等问题。
|
23天前
|
Web App开发 前端开发 JavaScript
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
|
4天前
|
移动开发 前端开发 数据挖掘
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
|
2月前
|
Dart 前端开发 Java