canvas基础笔记

news2025/1/17 15:52:04

一、简介

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.coloradmin.cn/o/997910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构核心技术之微服务架构

小熊学Java&#xff1a;https://www.javaxiaobear.cn/&#xff0c;文末有免费资源 本文我们来学习微服务的架构设计 主要包括如下内容。 单体系统的困难&#xff1a;编译部署困难、数据库连接耗尽、服务复用困难、新增业务困难。 微服务框架&#xff1a;Dubbo 和 Spring Clou…

sdkman 的安装配置与 sdk 管理

sdkman 的安装配置与 sdk 管理 记录一下项目使用的工具&#xff0c;目前环境的管理有以下几个&#xff1a; sdkmanpyenvnvm 这里主要讲一下 sdkman&#xff0c;我们项目是通过 sdkman 进行 java 和 maven 的管理&#xff0c;这个写的挺简单的&#xff0c;加上一个自己写的自…

unipush2.0实现APP消息推送(2)云函数多个方法的创建与使用

问题&#xff1a;上篇文章我们已经介绍到了unipush2.0消息推送的实现思路&#xff0c;但是遇到一个问题就是如何在一个云函数里写多个方法供传统服务端调用&#xff1f; 这样做的目的&#xff1a;这样传统服务端就可以调用一个云函数url路径传递不同的参数标识走不同的方法了 …

uni-app--》基于小程序开发的电商平台项目实战(一)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

《AI一键生成抖音商品种草文案》让你秒变带货王!

在这个数字化的时代&#xff0c;我们的生活被各种应用所包围&#xff0c;其中&#xff0c;抖音作为一款短视频分享平台&#xff0c;已经成为了我们生活中不可或缺的一部分。然而&#xff0c;作为一名抖音创作者&#xff0c;你是否曾经遇到过这样的困扰&#xff1a;在创作商品种…

Linux C : select简介和epoll 实现

目录 一、基础知识 二、select 模型服务流程 二、select 模式的缺点。 三、poll 概要 四、epoll 服务端实现流程 1.epoll_create&#xff1a; 2.epoll_ctl 3.epoll_wait 五、epoll示例代码实现 1.epoll实现服务端 2.客户端采用tcp进行访问 一、基础知识 首先要知道&…

flink的几种常见的执行模式

背景 在运行flink时&#xff0c;我们经常会有几种不同的执行模式&#xff0c;比如在IDE中启动时&#xff0c;通过提交到YARN上&#xff0c;还有通过Kebernates启动时&#xff0c;本文就来记录一下这几种模式 flink的几种执行模式 flink嵌入式模式&#xff1a; 这是一种我们在…

基于keras中Lenet对于mnist的处理

文章目录 MNIST导入必要的包加载数据可视化数据集查看数据集的分布开始训练画出loss图画出accuracy图 使用数据外的图来测试图片可视化转化灰度图的可视化可视化卷积层的特征图第一层卷积 conv1 和 pool1第二层卷积 conv2 和 pool2 MNIST MNIST&#xff08;Modified National …

从零开始的PICO教程(4)--- UI界面绘制与响应事件

从零开始的PICO教程&#xff08;4&#xff09;— UI界面绘制与响应事件 文章目录 从零开始的PICO教程&#xff08;4&#xff09;--- UI界面绘制与响应事件一、前言1、大纲2、教程示例 二、具体步骤1、PICO VR环境配置2、XR的UI Canvas画布创建与调整&#xff08;1&#xff09;C…

【雷达原理】雷达信号级建模与仿真

目录 前言一、LFMCW信号概述1.1 优点1.2 缺点 二、LFMCW信号模型2.1 发射信号模型2.2 接收信号模型2.3 信号混频 三、MATLAB仿真3.1 仿真结果3.2 代码 四、参考文献 前言 雷达信号形式多种多样&#xff0c;按照雷达的体制进行分类&#xff0c;有脉冲雷达和连续波雷达。脉冲雷达…

C#程序到底从哪里开始看,从Main函数开始,那么Main函数是什么?

视觉人机器视觉粉丝问我,拿到自己公司得架构,问我,C#程序到底从哪里看,从Main函数开始,那么Main函数是什么? Main()函数 Main()是C#应用程序的入口点,执行这个函数就是执行应用程序。也就是说,在执行过程开始时,会执行Main()函数,在Main()函数执行完毕时,执行过…

微信小程序上拉触底事件

一、什么是上拉触底事件 上拉触底是移动端的专有名词&#xff0c;通过手指在屏幕上的上拉滑动操作&#xff0c;从而加载更多数据的行为。 二、监听上拉触底事件 在页面的.js文件中&#xff0c;通过onReachBottom()函数即可监听当前页面的上拉触底事件。 三、配置上拉触底距…

vue组件库开发,webpack打包,发布npm

做一个像elment-ui一样的vue组件库 那多好啊&#xff01;这是我前几年就想做的 但webpack真的太难用&#xff0c;也许是我功力不够 今天看到一个视频&#xff0c;早上6-13点&#xff0c;终于实现了&#xff0c;呜呜 感谢视频的分享-来龙去脉-大家可以看这个视频&#xff1a;htt…

【List篇】ArrayList 的线程不安全介绍

ArrayList 为什么线程不安全&#xff1f; 主要原因是ArrayList是非同步的,没有同步机制,并且其底层实现是基于数组&#xff0c;而数组的长度是固定的。当对 ArrayList 进行增删操作时&#xff0c;需要改变数组的长度&#xff0c;这就会导致多个线程可能同时操作同一个数组&…

Unlikely argument type for equals(): int seems to be unrelated to String

前面字符串 后面数值 if (new Integer(2).equals(loginUser.getStatus())) 或者另外定义一个吧

JAVASE 窗口

本文目录 1、前言2、JFrame、JButton3、JLabl4、ImageIcon 1、前言 java提供了很多已经写好了的类供我们使用&#xff0c;而我们没必要去细腻研究它的构成原理&#xff0c;就好比我们让我们编程让机器人动起来&#xff0c;没必要细腻研究机器人每个器件是怎么做出来的一样&…

Qt Designer UI设计布局小结

目录 前言1 居中布局2 左右布局3 上下布局4 复杂页面布局总结 前言 本文总结了在开发Qt应用程序时使用 Designer 进行UI布局的一些心得体会。Qt Designer是Qt提供的一个可视化界面设计工具&#xff0c;旨在帮助开发人员快速创建和布局用户界面。它提供了丰富的布局管理器和控件…

系统架构设计专业技能 · 计算机组成与结构

现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 计算机组成与结构 一、计算机结构1.1 CPU 组成1.2 冯诺依曼…

【数据结构-队列】阻塞队列

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

vue学习之 v-for key

v-for key Vue使用 v-for渲染的元素列表时&#xff0c;它默认使用“就地更新”的策略。如果数据项的顺序被改变&#xff0c;Vue 将不会移动 DOM元素来匹配数据项的顺序&#xff0c;而是就地更新每个元素。创建 demo9.html,内容如下 <!DOCTYPE html> <html lang"…