HTML5 —— 初识 Canvas 画布

简介: HTML5 —— 初识 Canvas 画布

Canvas 画布

<canvas> 元素用于图形的绘制,通过脚本(通常是JavaScript)来完成


绘制一个矩形

注:


getContext(“2d”) 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法

fillStyle 可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)

fillRect(x, y, width, height) 方法定义了矩形当前的填充方式

  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
  </head>
  <body>
      <canvas id="myCanvas" width="200" height="100" style="border: 1px solid black"></canvas>
      <script>
          let c = document.querySelector('#myCanvas')
          let ctx = c.getContext("2d")
          ctx.fillStyle = "#FF0000"
          ctx.fillRect(0, 0, 150, 75)
      </script>
  </body>
  </html>

1d9ad2165dcf4b9dbb0f1340d791adeb.png

绘制一条线

注:

  1. moveTo(x,y) 定义线条开始坐标
  2. lineTo(x,y) 定义线条结束坐标
  3. stroke() 方法来绘制线条
  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
  </head>
  <body>
      <canvas id="myCanvas" width="200" height="100" style="border: 1px solid black"></canvas>
      <script>
          let c = document.querySelector('#myCanvas')
          let ctx = c.getContext("2d")
          ctx.moveTo(0, 0)
          ctx.lineTo(200, 100)
          ctx.stroke()
      </script>
  </body>
  </html>

99a047416020418986fbba09ff1d08c7.png

绘制一个圆

注:

  1. beginPath() 方法开始一条路径,或重置当前的路径
  2. arc() 方法创建弧/曲线(用于创建圆或部分圆)
  3. stroke() 方法来绘制线条
  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
  </head>
  <body>
      <canvas id="myCanvas" width="200" height="100" style="border: 1px solid black"></canvas>
      <script>
          let c = document.querySelector('#myCanvas')
          let ctx = c.getContext("2d")
          ctx.beginPath()
          ctx.arc(95, 50, 40, 0, 2*Math.PI)
          ctx.stroke()
      </script>
  </body>
  </html>

6997cd494b43421a93d51fcfb6d83eaf.png

  1. ctx.stroke() 改为 ctx.fill()
  2. f0bd96c8c2c74ea9af17b6131d09b637.png

绘制一个文本

注意:

  1. font - 定义字体
  2. fillText(text,x,y) - 在 canvas 上绘制实心的文本
  3. strokeText(text,x,y) - 在 canvas 上绘制空心的文本
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <canvas id="myCanvas" width="200" height="100" style="border: 1px solid black"></canvas>
        <script>
            let c = document.querySelector('#myCanvas')
            let ctx = c.getContext("2d")
            ctx.font = "30px Arial"
            ctx.fillText("Hello H5", 10, 50)
        </script>
    </body>
    </html>

b7c19a76f0c048b88526e38f01e9a148.png

  1. 实心变空心:把 ctx.fillText(“Hello H5”, 10, 50) 改为 ctx.strokeText(“Hello H5”, 10, 50)
  2. 10d81b7db71e4e3f8aa47f690ac93d27.png
  3. 绘制一个线性渐变

注意:


createLinearGradient(x,y,x1,y1) - 创建线条渐变

addColorStop() 方法指定颜色停止,参数使用坐标来描述,可以是0至1

使用渐变,设置 fillStyle 或 strokeStyle 的值为渐变,然后绘制形状,如矩形,文本,或一条线。

  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
  </head>
  <body>
      <canvas id="myCanvas" width="200" height="100" style="border: 1px solid black"></canvas>
      <script>
          let c = document.querySelector('#myCanvas')
          let ctx = c.getContext("2d")
          // 创建渐变
          let grd = ctx.createLinearGradient(0, 0, 200, 0)
          grd.addColorStop(0, 'red')
          grd.addColorStop(1, 'white')
          // 填充渐变
          ctx.fillStyle = grd
          ctx.fillRect(10, 10, 180, 80)
      </script>
  </body>
  </html>

761b1c77577a4241949fa6cbbb8fd136.png

绘制一个径向渐变

注:createRadialGradient(x,y,r,x1,y1,r1) - 创建一个径向/圆渐变

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head> 
    <body>
        <canvas id="myCanvas" width="200" height="100" style="border: 1px solid black"></canvas>
        <script>
            let c = document.querySelector('#myCanvas')
            let ctx = c.getContext("2d")
            // 创建渐变
            let grd = ctx.createRadialGradient(75, 50, 5, 90, 60, 100)
            grd.addColorStop(0, 'red')
            grd.addColorStop(1, 'white')
            // 填充渐变
            ctx.fillStyle = grd
            ctx.fillRect(10, 10, 150, 80)
        </script>
    </body>
    </html>

820970d3a94f468fbafa3c89c89a2a09.png

绘制一个图像

把一幅图像放置到画布上,使用方法:drawImage(image, x, y)

  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
  </head> 
  <body>
      <img id="scream" src="xxx.jpg" width="220" height="277">
      <canvas id="myCanvas" width="250" height="300" style="border: 1px solid black"></canvas>
      <script>
          let c = document.querySelector('#myCanvas')
          let ctx = c.getContext("2d")
          let img = document.querySelector("#scream")
          img.onload = function() {
              ctx.drawImage(img, 10, 10)
          }
      </script>
  </body>
  </html>

image.png

不积跬步无以至千里 不积小流无以成江海

相关文章
|
12天前
|
Web App开发 移动开发 前端开发
html5 canvas五彩碎纸屑飘落动画特效
h5 canvas飘落纸片动画是一款实现五彩纸屑飘落的背景动画特效,基于canvas绘制的空中飘落的纸屑片动画特效,适用于网页动态背景效果代码。简单使用,欢迎下载!代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,是一款不错的的特效插件,希望大家喜欢!
32 5
|
23天前
|
前端开发
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
19 0
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
|
23天前
|
移动开发 前端开发 HTML5
HTML5 Canvas制作的粒子十秒倒计时源码
一段基于HTML5 Canvas制作的粒子爆炸,十秒数字倒计时,全屏倒计时动画效果,给人一种非常大气的视觉感
22 0
HTML5 Canvas制作的粒子十秒倒计时源码
|
1月前
|
前端开发 JavaScript
Canvas三维变化背景动画HTML源码
Canvas三维变化背景动画HTML源码
31 5
|
3月前
|
XML 移动开发 前端开发
HTML5 SVG和canvas的性能探讨
HTML5 中的 SVG(可缩放矢量图形)和 Canvas(画布)分别用于网页图形绘制。SVG 基于矢量图形,使用 XML 描述,适合静态或少量动态内容(如图标、图表),易于编辑且保持高分辨率;Canvas 则基于位图,通过 JavaScript 绘制,更适合快速更新大量图形的场景(如游戏、动态动画),但在复杂图形计算时可能遇到性能瓶颈。总体而言,SVG 适用于静态和少量动态内容,而 Canvas 更适合高频率更新和性能要求高的场景。
|
3月前
|
移动开发 前端开发 JavaScript
HTML5 Canvas详解及应用
HTML5 Canvas 允许通过 JavaScript 在网页上动态绘制图形、动画等视觉内容。首先在 HTML 中定义 `&lt;canvas&gt;` 元素,并通过 JavaScript 获取画布上下文进行绘制。常见方法包括绘制矩形、路径、圆形和文本,以及处理图像和创建动画效果。适用于游戏开发、数据可视化、图像编辑和动态图形展示等多种应用场景。需要注意性能优化、无状态绘制及自行处理事件等问题。
|
3月前
|
移动开发 前端开发 数据挖掘
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
|
4月前
|
Dart 前端开发 Java
|
3月前
|
前端开发
在 HTML canvas 绘制文本
在 HTML canvas 绘制文本
21 0
|
4月前
|
移动开发 前端开发 JavaScript