好程序员:前端JavaScript全解析——Canvas绘制形状(上)

news2024/12/27 3:02:21

●今天,我们来通过 canvas 提供的方法开绘制一些简单的形状绘制矩形

绘制基础矩形。下面一起看看好程序员老师的讲解吧~

●语法 : 工具箱.rect( 矩形起点 x 轴坐标, 矩形起点 y 轴坐标, 矩形宽度, 矩形高度 )

// 0. 获取到页面上的 canvas 标签元素节点
const canvasEle = document.querySelector('#canvas')

// 1. 获取当前这个画布的工具箱
const ctx = canvasEle.getContext('2d')

// 2. 绘制基础矩形
ctx.rect(100, 100, 100, 100)


复制代码●这个表示从画布坐标 100, 100 的位置开始绘制一个 100 * 100 的矩形

●注意 : 这里绘制的矩形只是一个矩形痕迹, 打开浏览器你会发现什么都没有出现

●这是因为我们没有进行描边或者填充

// 0. 获取到页面上的 canvas 标签元素节点
const canvasEle = document.querySelector('#canvas')

// 1. 获取当前这个画布的工具箱
const ctx = canvasEle.getContext('2d')

// 2. 绘制基础矩形
ctx.rect(100, 100, 100, 100)

// 3. 填充
ctx.fill()


复制代码

●这样一个矩形就出现了

绘制描边矩形

●canvas 的工具箱里面还提供了专门的描边矩形

●不需要我们自己单独去描边了, 绘制出来就是描边过后的效果

●语法 : 工具箱.strokeRect( 矩形起点 x 轴坐标, 矩形起点 y 轴坐标, 矩形宽度, 矩形高度 )

// 0. 获取到页面上的 canvas 标签元素节点
const canvasEle = document.querySelector('#canvas')

// 1. 获取当前这个画布的工具箱
const ctx = canvasEle.getContext('2d')

// 2. 绘制基础矩形
ctx.strokeRect(100, 100, 100, 100)


复制代码

●我们同样可以用 lineWidth 和 strokeStyle 来设置线宽和描边颜色

绘制填充矩形

●和描边矩形一个道理, 只不过这次是填充而已

●语法 : 工具箱.fillRect( 矩形起点 x 轴坐标, 矩形起点 y 轴坐标, 矩形宽度, 矩形高度 )

// 0. 获取到页面上的 canvas 标签元素节点
const canvasEle = document.querySelector('#canvas')

// 1. 获取当前这个画布的工具箱
const ctx = canvasEle.getContext('2d')

// 2. 绘制基础矩形
ctx.strokeRect(100, 100, 100, 100)


复制代码

●填充矩形也一样可以使用 fillStyle 来设置填充颜色

绘制擦除矩形

●这个其实就是我们画画时候的橡皮擦, 擦除掉一个部分的内容

●语法 : 工具箱.clearRect( 矩形起点 x 轴坐标, 矩形起点 y 轴坐标, 矩形宽度, 矩形高度 )

// 0. 获取到页面上的 canvas 标签元素节点
const canvasEle = document.querySelector('#canvas')

// 1. 获取当前这个画布的工具箱
const ctx = canvasEle.getContext('2d')

// 2. 绘制基础矩形
ctx.fillRect(100, 100, 100, 100)

// 3. 绘制擦除矩形
ctx.clearRect(150, 150, 30, 30)


复制代码●从坐标 150, 150 位置开始, 擦除一块 30 * 30 的区域, 不管有什么都直接抹掉

绘制圆形

●canvas 内有绘制原型的方法

●在这之前呢, 我们先要了解一下什么是圆形

●其实就是从一个点出发, 确定半径以后, 开始画弧线, 当弧线饶了一圈回到原点的时候

●就是一个圆形

●所以, 与其说是绘制圆形, 不如说是绘制弧线弧度

●在 canvas 内, 我们绘制的时候, 使用的都是弧度

●所以, 我们先要来知道什么是弧度

●这是一个圆, 圆心为 o, 半径为 r

●x 轴正方向上和圆周的焦点为弧度起点

●我们在圆周上, 从弧度起点, 顺着圆周移动, 当弧长和半径一样的时候

●此时这一段弧长所对应的圆心角是 1 弧度

●根据我们的圆周公式 : 周长 = 2 * π * 半径

●所以我们一个正圆的弧度就应该是 2 * π 的弧度绘制弧线

●了解了什么是弧度, 接下来就可以开始绘制弧线了

●语法 : 工具箱.arc( x, y, r, startAngle, endAngle, counterclockwise )

○x : 圆心的 x 轴坐标

○y : 圆心的 y 周坐标

○r : 圆的半径

○startAngle : 绘制弧线的起点弧度

○endAngle : 绘制弧线的终点弧度

○counterclockwise : 方向, false 为顺时针(默认), true 为逆时针

●画一个简单的四分之一圆试试看

●根据刚才的公式

○一个圆周是 : 2 * π 弧度

○半个圆周是 : π 弧度

○四分之一圆周是 : π / 2 弧度

// 0. 获取到页面上的 canvas 标签元素节点
const canvasEle = document.querySelector('#canvas')

// 1. 获取当前这个画布的工具箱
const ctx = canvasEle.getContext('2d')
ctx.strokeStyle = '#000'
ctx.lineWidth = 2

// 2. 绘制弧线路径
ctx.arc(150, 150, 100, 0, Math.PI / 2, false)

// 3. 描边
ctx.stroke()


复制代码

●再来测试一下逆时针计算弧度

// 0. 获取到页面上的 canvas 标签元素节点
const canvasEle = document.querySelector('#canvas')

// 1. 获取当前这个画布的工具箱
const ctx = canvasEle.getContext('2d')
ctx.strokeStyle = '#000'
ctx.lineWidth = 2

// 2. 绘制弧线
ctx.arc(150, 150, 100, 0, Math.PI / 2, true)

ctx.stroke()


复制代码

●注意 :

○绘制路线可以是顺时针或者逆时针

○但是计算弧度的点的时候, 一定是按照规则计算

关注小源,为您解答更多前端和Java技术相关文章!

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

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

相关文章

Camtasia2023简体中文标准版免费更新下载

Camtasia专业的 屏幕录制和视频剪辑软件3000多万专业人士在全球范围内使用Camtasia展示产品,教授课程,培训他人,以更快的速度和更吸引人的方式进行沟通和屏幕分享。使您在Windows和Mac上进行录屏和剪辑创作专业外观的视频变得更为简单。 Camt…

Vue3 element-plus el-select 无法选中,又不报错

html 结构 <el-form :model"conditionForm"ref"conditionForm"label-width"100px" class"demo-ruleForm"><el-selectv-model"conditionForm.personnel"multipleplaceholder"Select"style"width: 2…

知网导入EndNote

首先进入知网&#xff0c;搜索你想要找的期刊论文。 选择EndNote 点击导出 浏览器自动下载以txt为后缀的文件 导入到EndNote中

【C++】异常,你了解了吗?

在之前的C语言处理错误时&#xff0c;会通过assert和错误码的方式来解决&#xff0c;这导致了发生错误就会直接把程序关闭&#xff0c;或者当调用链较长时&#xff0c;就会一层一层的去确定错误码&#xff0c;降低效率&#xff0c;所以c针对处理错误&#xff0c;出现了异常&…

ChatGPT写小论文

ChatGPT写小论文 只是个人对写小论文心得?从知乎,知网自己总结的,有问题,可以留个言我改一下 文章目录 ChatGPT写小论文-1.写论文模仿实战(狗头)0.论文组成1.好论文前提:2.标题3.摘要4.关键词5.概述6.实验数据、公式或者设计7.结论&#xff0c;思考8.参考文献 0.模仿1.喂大纲…

【云原生】Dockerfile制作WordPress镜像,实现Compose + K8s编排部署

文章目录 &#x1f479; 关于作者前言环境准备目录结构 dockerfile制作镜像yum 脚本Dockerfile-mariadb 镜像Dockerfile-service 镜像docker compose 编排 K8s部署svcdeploy ✊ 最后 &#x1f479; 关于作者 大家好&#xff0c;我是秋意零。 &#x1f608; CSDN作者主页 &…

lambda的toMap是不是要注意点,线上事故

异常回顾 先看代码&#xff1a; dbTaxiDrivers.ifPresent((drivers) -> { map.putAll(drivers.stream() .collect(Collectors.toMap(TaxiDriverInfo::getOperationId, item -> item))); }); 相信很多为了减少2层for循环&#xff0c…

✨✨✨ ❃ ♕ ꕥ Xpath解析html获取表情符号,丰富你的文章 ꧁ ꧂꧁ ꧂

✨✨✨ ❃ ♕ ꕥ Xpath解析html获取表情符号&#xff0c;丰富你的文章 ꧁ ꧂꧁ ꧂ 1. 推荐几个好玩的表情符号网站2. xpath解析html获取表情3. xpath解析html源码3.1 parse_li.py3.2 symbol2.html 参考 1. 推荐几个好玩的表情符号网站 &#x1f495; &#x1f9da; &#x1f6…

让科幻照进现实,未来出行革命

在“新四化”&#xff08;电动化、网联化、智能化、共享化&#xff09;和“碳中和、碳达峰”双碳目标下&#xff0c;中国汽车产业正经历着前所未有之大变局。作为“智能化”核心之一的自动驾驶&#xff0c;在监管、技术和商业化方面持续积累、不断完善&#xff0c;即将迈入发展…

案例1:Java超市管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

浏览器【控制台】的小妙招-dom复制

了解前端开发的朋友应该对浏览器的控制台非常熟悉&#xff0c;毕竟日常里除了wife就是跟浏览器相处的最久了。 1、唤出控制台 打开一个网页&#xff1a; 按下键盘【F12】或者鼠标在网页任意位置【右键- 检查】&#xff0c;即可唤出浏览器的【控制台】 2、日常开发使用之【复制…

QuickTime Player + BlackHole解决Mac不能录内部声音

背景 在用mac录制屏幕时&#xff0c;发现不能录入电脑内的声音。 App Store中有一些收费的屏幕录制软件&#xff08;也需要安装特定的虚拟声卡&#xff09;。 现在实现完全免费的屏幕录制&#xff0c;QuickTime Player BlackHole组合&#xff0c;QuickTime Player是mac自带…

Android 12系统源码_CarService(一)CarService的基本架构

前言 1、Google官网上是这样介绍汽车架构的。 Car App&#xff1a;包括OEM和第三方开发的AppCar API&#xff1a;内有包含 CarSensorManager 在内的 API。位于 /platform/packages/services/Car/car-lib。CarService&#xff1a;系统中与车相关的服务&#xff0c;位于 /platfo…

报错记录:构造方法获取不了@Value的值,问题刨析与解决方案

报错记录&#xff1a;构造方法获取不了Value的值&#xff0c;问题刨析与解决方案 有时我们需要在构造函数中初始化属性&#xff0c;之前老的项目是用的I/O流来获取配置文件的值&#xff0c;目前配置转为线上&#xff0c;使用Apollo来获取值&#xff0c;由于获取Apollo的值被封装…

浅述 国产仪器 1761程控模块电源

1761程控模块电源是在自动测试环境中提供偏置功率和对部件或最终产品提供激励的理想设备&#xff0c;是测试系统必备的测试仪器。适用于研发、设计、生产制造等自动测试领域。 1761程控模块电源为用户选配电源提供了灵活性&#xff0c;根据需要可选购1&#xff5e;8种&#xff…

6.登录token

登录时生产token和refreshtoken&#xff0c;请求时带上token&#xff0c;后台校验&#xff0c;通过的话则进行处理&#xff0c;否则返回错误信息&#xff08;token失效过期等等&#xff09;&#xff0c;校验不通过会调用刷新token的接口&#xff0c;重新获取token&#xff0c;如…

< 封装公共导出模块:配合element实现提示 >

封装公共导出模块 &#x1f449; 前言&#x1f449; 一、原理&#x1f449; 二、实现案例&#x1f449; 三、效果演示往期内容 &#x1f4a8; &#x1f449; 前言 在 Vue elementUi 开发中&#xff0c;我们偶尔会遇到需要导出的列表&#xff0c;或者指定位置的导出内容。在一…

神经网络基础-手写数字识别

手写数字识别神经网络 基本原理 图像本质上被认为是一个矩阵&#xff0c;每个像素点都是一个对应的像素值&#xff0c;相当于在多维数据上进行相关的归类或者其他操作。 线性函数 线性函数的一个从输入到输出的映射&#xff0c;用于给目标一个每个类别对应的得分。 图像 ( …

leetcode刷题(9)二叉树(3)

各位朋友们&#xff0c;提前祝大家五一劳动节快乐啊&#xff01;&#xff01;&#xff01;今天我为大家分享的是关于leetcode刷题二叉树相关的第三篇我文章&#xff0c;让我们一起来看看吧。 文章目录 1.二叉树的层序遍历题目要求做题思路代码实现 2.从前序与中序遍历序列构造二…

Authing 正式发布应用集成网关 - Authing Gateway

2023 年 2月&#xff0c; Authing 推出了身份领域的 PaaS化应用集成网关 - Authing Gateway 。 Authing Gateway 提供将原有应用快速集成到 Authing 身份云产品的能力&#xff0c;在扩充身份认证方式的同时&#xff0c;提高资源的安全性和数据的隐私可靠性。 01.Authing Gatew…