canvas

  • 该标签需要配合js一起使用
  • 可以绘制三角形、矩形、圆形等多种图案
  • 常用于游戏、动画、可视化数据等工作场景
  • 可以直接使用canvas标签测试出是否兼容
html 复制代码
<canvas width="500" height="500" style="border:1px solid">
    请使用支持canvas的主流浏览器查看
</canvas>

基本使用

  • index.html
html 复制代码
<canvas width = "500" height = "500" id = "cvs"></canvas> 
  • 三角形
js 复制代码
   const c = document.getElementById("cvs");
    // 三角形 起笔坐标(X,Y)
    c.moveTo(50, 50);
    // 点1
    c.lineTo(100, 100);
    // 点2
    c.lineTo(0, 100);
    // 点3
    c.closePath(); // 回到起笔位置 等同于 c.lineTo(50, 50);
    // 连接点位
    c.stroke();
  • 四边形
js 复制代码
   const c = document.getElementById("cvs");
     /* ... */
    // 清除路径
    c.beginPath();

    // 四边形
    c.moveTo(200, 200);
    // 点1
    c.lineTo(300, 200);
    // 点2
    c.lineTo(300, 300);
    // 点3
    c.lineTo(200, 300);
    // 点4
    c.lineTo(200, 200);

    c.lineWidth = '0';
    // 线条交界处样式
    c.lineJoin = 'miter'; // 'round' 圆角 'bevel' 斜切角
    // 线条折转样式
    c.lineCap = 'butt'; // 'round' 圆形 'square' 方形
    // 线条样式
    c.strokeStyle = '#000';
    // 填充
    // c.fill();
    // 连接点位
    c.stroke();

使用接口

  • 四边形
js 复制代码
    const c = document.getElementById("cvs");
    // 参数: (x, y, width, height)
    c.fillRect(100, 200, 100, 100);   // 填充四边形 左
    c.rect(200, 200, 100, 100);       // 无边无填充四边形 中  (看不见,但是存在)
    c.strokeRect(300, 200, 100, 100); // 边框四边形 右
  • 清空四边形画布
js 复制代码
// 参数: (x,y,width,height)
c.clearRect(0, 0, 500, 500);
  • 圆形
js 复制代码
    const c = cRef.current.getContext('2d');
    // 参数: (x, y , 正右(3点钟)方向为起点, Math.PI / 180 * 角度, 是否顺时针方向)
    c.arc(250, 250, 100, 0, Math.PI * 2, true);
    c.stroke();

样式保存

js 复制代码
    const c = cRef.current.getContext('2d');
    c.lineWidth = 2;
    c.strokeStyle = 'green';
    // 保存样式
    c.save();
    // 画个圆
    c.arc(100, 100, 100, 0, Math.PI * 2, true);
    // 重新起笔 (x + r, y)    (没有设置这个就会有图1的情况)
    c.moveTo(350, 250); // 下一个圆的圆心点 + 半径 就是它X轴的起点位置 
    // 重新画个圆
    c.arc(250, 250, 100, 0, Math.PI * 2, true);
    // 读取之前的样式
    c.stroke();
js 复制代码
    const c = cRef.current.getContext('2d');
    c.lineWidth = 2;
    c.strokeStyle = 'green';
    // 保存样式
    c.save();
    // 画个圆
    c.arc(100, 100, 100, 0, Math.PI * 2, true);

    // 清除路径
    c.beginPath();
    // 重新画个圆
    c.arc(250, 250, 100, 0, Math.PI * 2, true);
    // 读取之前的样式渲染
    c.stroke();

旋转、移动(连续使用效果可以叠加)

js 复制代码
c.translate(x, y); // 移动
c.rotate((Math.PI / 180) * 角度);  // 旋转
相关推荐
jvxiao1 小时前
你真的懂作用域吗?从编译原理角度深度 JS 的作用域
前端·javascript
Darling噜啦啦1 小时前
二叉树与递归算法实战:从树结构到 LeetCode 爬楼梯,一文吃透前端数据结构与递归思维
前端·javascript·数据结构
星栈1 小时前
Rust + Makepad 应用怎么打包发布:Windows、macOS、Linux 全平台交付
前端·rust
Aolith1 小时前
React 路由守卫:我用一个组件替代了 Vue 的 beforeEach
前端·react.js
Daybreak1 小时前
从 PDD、DDD、SDD 到 TDD:我是如何用一套 Agent 工程方法论推进 My-Notion 的
前端
HjhIron2 小时前
从零实现一个待办事项应用:前端必学的Ajax与Node.js实战
前端·后端
yingyima2 小时前
JavaScript 正则表达式:从零开始的实战对比
前端
Sammyyyyy2 小时前
月之暗面 Kimi Code 0.4.0 发布,终端 AI 编码助手全面采用 TypeScript,实现毫秒级启动
前端·javascript·人工智能·ai·typescript·servbay
范什么特西2 小时前
配置文件xml和properties
xml·前端
jnene2 小时前
html 时间、价格筛选样式处理
前端·css·html