canvas基础笔记

一、简介

Canvas是HTML5中的一个元素,它提供了一个可以使用JavaScript绘制图形的区域。它提供了一个强大的绘图API,可以用于创建各种图形,包括线条、矩形、圆形、文本等

  • Canvas 是 HTML5 中的一个元素,用于绘制图形、动画和图像。
  • 它提供了一个画布,可以通过 JavaScript 来操作画布上的像素,实现各种绘图效果

<canvas> 标签只有两个属性—— widthheight,当没有设置宽度和高度的时候,<canvas> 会初始化宽度为 300px 和高度为 150px

需要注意的是, 通过 CSS 也可以定义 canvas 的尺寸,但此元素尺寸非彼画布尺寸,在绘制时图像会伸缩以适应它的画布尺寸;如果元素尺寸和画布尺寸比例不一样,绘制出来的图像是扭曲的。

只有同时通过 CSS 指定了 width 和 height,才会出现比例不一致,如果只定义 width: 400px,你会发现高度会自动变成 200px

二、使用 Canvas

  • 在 HTML 中,通过 <canvas> 标签来创建一个 Canvas 元素。
  • 使用 JavaScript,可以通过获取 Canvas 元素的上下文对象来绘制图形。
  • 1、创建Canvas元素

在HTML中,可以使用<canvas>标签来创建一个Canvas元素。例如:

<canvas id="myCanvas" width="500" height="300"></canvas>

上面的代码创建了一个宽度为500像素,高度为300像素的Canvas元素,并指定了一个id为"myCanvas"。

  • 获取Canvas元素:可以使用JavaScript的querySelector方法或者直接通过ID获取Canvas元素,并将其存储在一个变量中,方便后续操作。
var canvas = document.querySelector('#canvas');
  • 2、获取Canvas上下文

canvas 起初是空白的,脚本首先需要找到渲染上下文,然后在它的上面绘制。Canvas元素需要一个上下文对象来进行绘制操作。在JavaScript中,可以使用getContext()方法来获取Canvas的上下文。上下文对象提供了一系列的绘图方法,可以用来绘制图形。例如:

var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");

上面的代码获取了id为"myCanvas"的Canvas元素,并通过getContext("2d")方法获取了一个2D上下文对象。

  • 3、绘制形状

使用Canvas的上下文对象,可以绘制各种形状,如矩形、圆形、线条等。

  • 使用 Canvas 的上下文对象的方法,如 fillRect()strokeRect()fillText() 等,可以绘制矩形、文本等基本图形。
  • 这些方法接受不同的参数,如坐标、尺寸、颜色等,可以根据需求进行调整。
  • 使用 Canvas 的上下文对象的方法,如 beginPath()moveTo()lineTo()closePath() 等,可以绘制路径。
  • 绘制路径可以实现更复杂的图形,如直线、曲线、多边形等。
  • 以下是一些常用的绘制方法:

    • fillRect(x, y, width, height):绘制填充的矩形。
    • strokeRect(x, y, width, height):绘制边框的矩形。
    • clearRect(x, y, width, height):清除指定矩形区域内的内容。
    • beginPath():开始一个新的路径。
    • moveTo(x, y):将绘图游标移动到指定的坐标。
    • lineTo(x, y):绘制一条直线到指定的坐标。
    • arc(x, y, radius, startAngle, endAngle, anticlockwise):绘制一段圆弧。
    • fill():填充当前路径。
    • stroke():绘制当前路径的边框。
// 绘制直线
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(200, 50);
ctx.stroke();// 绘制矩形
ctx.fillRect(50, 50, 150, 100);// 绘制圆形
ctx.beginPath();
ctx.arc(150, 150, 50, 0, 2 * Math.PI);
ctx.fill();
  • 4、绘制文本

    使用Canvas的上下文对象,还可以绘制文本。canvas提供了一些方法来绘制文本,包括设置字体、字号和文本内容等以下是一些常用的绘制文本的方法:

    • font = "size font":设置文本的字体大小和字体样式。
    • fillText(text, x, y):绘制填充的文本。
    • strokeText(text, x, y):绘制文本边框。
    • measureText(text):返回一个包含文本宽度的对象。
  •  5、设置样式和颜色

Canvas提供了一些方法来设置绘制的样式和颜色,如线条的宽度(lineWidth)、填充色(fillStyle)和边框色(strokeStyle)等。

// 设置线条宽度和颜色
ctx.lineWidth = 2;
ctx.strokeStyle = '#000000';// 设置填充色
ctx.fillStyle = '#FF0000';
  • 6、绘制图像

    使用Canvas的上下文对象,可以绘制图像。

  • 使用 Canvas 的上下文对象的方法,如 drawImage(),可以绘制图像。
  • 可以加载图片,并在 Canvas 上绘制图片,还可以对图片进行缩放、剪切等操作。
  • 以下是一些常用的绘制图像的方法:

    • drawImage(image, x, y):绘制图像。
    • getImageData(x, y, width, height):获取指定区域的图像数据。
  • 7、动画

    使用Canvas,可以创建动画效果。常用的方法是使用requestAnimationFrame()函数来循环调用绘制代码,以实现动画效果。

  • 使用 Canvas 和 JavaScript,可以实现动画效果。
  • 可以使用 requestAnimationFrame() 方法来循环调用绘制函数,实现平滑的动画效果。
  • 例如:

    function draw() {// 绘制代码requestAnimationFrame(draw);
    }
    draw();
    

    上面的代码定义了一个draw()函数,该函数会不断地被调用,从而实现动画效果。

  • 8、清空画布

  • 使用 Canvas 的上下文对象的方法,如 clearRect(),可以清空画布。
  • 可以在每次绘制之前,先清空画布,然后再进行绘制,实现动态的效果。
ctx.clearRect(0, 0, canvas.width, canvas.height);

总结

  • Canvas 是一个强大的绘图工具,可以实现各种图形、动画和图像的绘制。
  • 通过学习 Canvas,可以掌握基本的绘图技巧,为网页设计和开发提供更多可能性。
  • 通过学习这些知识,可以开始使用Canvas绘制各种图形、文本和图像,并创建动画效果。

那就先记录到这里叭!~其它的遇到了再补充啦!~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/128696.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-tree 懒加载数据,展开的节点与查询条件联动

目录 效果描述实现原理步骤1&#xff1a;el-tree设置node-key步骤2&#xff1a;懒加载时对数据进行处理&#xff0c;给整个树形数据添加唯一值步骤3&#xff1a;(联动) 点击左侧树形结构&#xff0c;右侧对应查询框自动赋值步骤4&#xff1a;(联动) 右侧查询条件选择好后&#…

使用redis+lua通过原子减解决超卖问题【示例】

系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、使用redislua通过原子减解决超卖问题【示例】 五、SpringBoot整合Elasticsearch【代码示例】 文章目录 系…

数据结构 每日一练:将带头结点的单链表就地逆置(视频讲解两种方法)

目录 方法一 算法视频分析 方法二 算法视频分析 Q&#xff1a;什么是“就地”捏&#xff1f; A&#xff1a;就是指辅助空间复杂度为O(1)&#xff0c;通俗一点来说就是不需要再开辟一块空间来实现算法。 特别说明&#xff1a; 笔者第一次录制视频&#xff0c;言语有些不顺&…

软件测试/测试开发丨Web自动化 测试用例流程设计

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27173 一、测试用例通用结构回顾 1.1、现有测试用例存在的问题 可维护性差可读性差稳定性差 1.2、用例结构设计 测试用例的编排测试用例的项目结构 1…

设计模式之单列模式

单列模式是一种经典的设计模式&#xff0c;在校招中最乐意考的设计模式之一~ 设计模式就是软件开发中的棋谱&#xff0c;大佬们针对一些常见的场景&#xff0c;总结出来的代码的编写套路&#xff0c;按照套路来写&#xff0c;不说你写的多好&#xff0c;至少不会太差~ 在校招中…

GCP之Google Cloud Infrastructure

Google Cloud 的物理网络是如何连接的&#xff1f; Google Cloud 分为 regions&#xff0c;regions 又分为 zones。 region 是一个地理区域&#xff0c;其中一个 VM 到另一个 VM 的往返时间 &#xff08;RTT&#xff09; 通常小于 1毫秒&#xff1b;zone 是 region 中的部署区…

LeetCode(力扣)37. 解数独Python

LeetCode37. 解数独 题目链接代码 题目链接 https://leetcode.cn/problems/sudoku-solver/description/ 代码 class Solution:def solveSudoku(self, board: List[List[str]]) -> None:"""Do not return anything, modify board in-place instead."…

dnmp运行时404报错

dnmp运行时404报错 问题截图&#xff1a; dnmp简介 M1芯片&#xff08;Arm CPU&#xff09; 环境中搭建PHPNGINXMYSQL的利器&#xff0c;docker容器管理当前使用的软件&#xff0c;可以简单安装软件和扩展。 localhost.conf 原始文件如下&#xff1a; server {listen 8…

MySQL 锁

一、介绍 1.1 锁的介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必…

Spring修炼之路--基础知识

一、核心概念 1.1软件模块化 软件模块化是一种软件开发的设计模式&#xff0c;它将一个大型的软件系统划分成多个独立的模块&#xff0c;每个模块都有自己的功能和接口&#xff0c;并且能够与其他模块独立地工作1. 软件模块化设计可以使软件不至于随着逐渐变大而变得不可控&am…

大数据-玩转数据-Flink 容错机制

一、概述 在分布式架构中&#xff0c;当某个节点出现故障&#xff0c;其他节点基本不受影响。在 Flink 中&#xff0c;有一套完整的容错机制&#xff0c;最重要就是检查点&#xff08;checkpoint&#xff09;。 二、检查点&#xff08;Checkpoint&#xff09; 在流处理中&am…

初识docker

目录 docker解决的问题1. 开发、测试和运维人员之间的矛盾2. 更轻量的虚拟化&#xff0c;节省了虚拟机的性能损耗 虚拟机与容器的区别1. 虚拟机2. 容器 Docker 系统架构 docker解决的问题 1. 开发、测试和运维人员之间的矛盾 “程序在我这跑得好好的&#xff0c;在你那怎么就…

Qt的窗口系统

代码仓库以及参考文件见文章底部 坐标体系 要想学好GUI,界面的坐标系首先要搞清楚 在Qt编程中,以左上角为原点,X向右增加,Y向下增加。 对于所有嵌套的窗口,其坐标是相对于父窗口来说的。 QWidget 所有窗口以及窗口控件都是从QWidget直接或者间接派生出来的。 对象模…

手写Spring:第5章-注入属性和依赖对象

文章目录 一、目标&#xff1a;注入属性和依赖对象二、设计&#xff1a;注入属性和依赖对象三、实现&#xff1a;注入属性和依赖对象3.0 引入依赖3.1 工程结构3.2 注入属性和依赖对象类图3.3 定义属性值和属性集合3.3.1 定义属性值3.3.2 定义属性集合 3.4 Bean定义补全3.5 Bean…

21.添加websocket模块

这里默认读者了解websocket协议&#xff0c;若是还不了解可以看下这篇文章wesocket协议。 websocket主要有三个步骤&#xff0c;1通过HTTP进行握手连接&#xff0c;2进行双向通信&#xff0c;3.协商断开连接 第一步的握手连接需要HTTP&#xff0c;所以还需要使用到上一节讲解…

Python实现猎人猎物优化算法(HPO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

OpenCV(三十三):计算轮廓面积与轮廓长度

1.介绍轮廓面积与轮廓长度 轮廓面积&#xff08;Contour Area&#xff09;是指轮廓所包围的区域的总面积。通常情况下&#xff0c;轮廓面积的单位是像素的平方。 轮廓长度&#xff08;Contour Length&#xff09;又称周长&#xff08;Perimeter&#xff09;&#xff0c;表示轮廓…

Unity 从0开始编写一个技能编辑器_01_分析需求

入职以来一直很想实现一个技能编辑器&#xff0c;在积累了一些经验以后&#xff0c;决定利用ScriptableObject开发一个&#xff0c;在此记录 1.简单的需求分析 在游戏开发中&#xff0c;技能系统是一个至关重要的组成部分。技能决定了游戏角色可以执行的各种动作&#xff0c;例…

代码随想录算法训练营第十八天|513. 找树左下角的值|112. 路径总和|106. 从中序与后序遍历序列构造二叉树

513. 找树左下角的值 题目&#xff1a;给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路一&#xff1a;层序遍历&#xff0c;最后一层的第一个元素&#xff0c;即…

java实时监控mysql数据库变化

对于二次开发来说&#xff0c;很大一部分就找找文件和找数据库的变化情况 对于数据库变化。还没有发现比较好用的监控数据库变化监控软件。 今天&#xff0c;我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1、打开数据库配置文件my.ini &#xff08;一般在数据库…