前端Canvas入门——怎么用Canvas画一些简单的图案

Canvas作为前端的画图工具,其实用途还是蛮广泛的,但是很多前端学习课程其实都很少涉及到这块内容。

于是乎,就写下这个了。

当然啦,目前还在学习摸索中。

一些实战代码,仅供参考:

    <canvas
        id="ctx"
        width="300px"
        height="300px"
        style="border: 1px solid;margin: 100px 0 0 666px;"
        >
        <!-- 
            border不起效果,不能直接使用border,而是用style去写,个人不建议使用这个border。
            默认宽高是300*150px
         -->
    </canvas>

    <script>
        // 通过id去获取canvas,这里不需要#
        const myCtx = document.getElementById('ctx')

        // 通过getContext()方法创建2d平面
        const ctx = myCtx.getContext("2d")

        // --------------------------------------------

        // 要求:画一个矩形
        // ctx.rect(100, 100, 100, 100)
        // 前面两个是起始的坐标位置,后面两个是宽高

        // 改变笔头
        // ctx.strokeStyle = "red"

        // 设置画笔的像素值
        // ctx.lineWidth = 3

        // 使用stroke()是画出形状,不会填充
        // ctx.stroke()

        // 使用fill是填充的意思
        // ctx.fill()

        // --------------------------------------------

        // 使用简单方法画矩形

        // 改变笔头
        // ctx.strokeStyle = "red"
    
        // 使用strokeRect()画出
        // ctx.strokeRect(125, 125, 50, 50)

        // 使用fillStyle,改变画笔颜色
        // ctx.fillStyle = "red"

        // 使用fillRect()填充
        // ctx.fillRect(100, 100, 100, 100)

        // 使用clearRect()清空
        // ctx.clearRect(125, 125, 50, 50)

        // -------------------------------------

        // 画一个三角形

        // 移动笔尖
        // ctx.moveTo(30, 40)

        // 先画出一条横线
        // ctx.lineTo(270, 40)

        // 再画出一条竖线
        // ctx.lineTo(270, 260)

        // 回到起点,闭合整个曲线
        // ctx.closePath()

        // -------------------------------------
        
        // 画一个圆形

        // 最后结束角不能是0,圆形必须是2*Math.PI
        // 还有个参数的——关于画的方向的,但是默认是顺时针,这里使用默认效果。
        // 从X轴开始出发,X轴算是0°
        // ctx.arc(150, 150, 50, 0, 2 * Math.PI)

        // 改变颜色
        // ctx.strokeStyle = "blue"

        // 完成绘图
        // ctx.stroke()

        // 改变填充颜色
        // ctx.fillStyle = "red"

        // 完成绘图
        // ctx.fill()

        // -------------------------------------

        // 画一个椭圆 - 不闭合的
        ctx.arc(150, 150, 88, 0, 1.8*Math.PI)

        // 改变画笔颜色
        // ctx.strokeStyle = "orange"

        // 完成绘图
        // ctx.stroke()

        // 改变填充颜色
        // ctx.fillStyle = "green"

        // 完成绘图 - 有bug - 并不是椭圆,而是被切了一小块的圆
        // ctx.fill()

        // 完善 - 闭合图案
        // 笔尖回到圆点
        // ctx.lineTo(150, 150)

        // 两段闭合
        // ctx.closePath()

        // 填充
        // ctx.fill()

        // -----------------------------------

        // 画一个圆
        ctx.arc(150, 150, 100, 0, 1.6 * Math.PI)

        // 要求:渐变色的椭圆形
        
        // 设置线性渐变色
        // const gradient = ctx.createLinearGradient(200, 200, 50, 50)

        // 设置放射状渐变色 - 在起始和结尾坐标处添加了半径
        const gradient = ctx.createRadialGradient(180, 180, 100, 75, 75, 100)

        // 添加颜色 - 注意前面的数字和后面的颜色
        gradient.addColorStop(0, "black")
        gradient.addColorStop("0.5", "#999")
        gradient.addColorStop("0.8", "red")
        gradient.addColorStop(1, "blue")

        // 直接填充
        ctx.fillStyle = gradient

        // 笔尖回到圆点
        ctx.lineTo(150, 150)

        // 两段闭合
        ctx.closePath()

        // 完成绘图
        ctx.fill()

注意最后一个椭圆的闭合的实现:

闭合前:

闭合后:

 


增加了渐变色的处理。

线性渐变和放射状渐变方法差不多,只不过创建函数有所区别。

其中放射状渐变需要注意的是,半径最好跟圆的半径一致,否则就会出现:

本节完。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Onekey正版steam分流下载工具

今天给大家介绍的是一款下载steam游戏的工具。Onekey工具&#xff0c;是一款游戏下载器&#xff0c;可以下载steam正版分流游戏。下载正版分流的网站很多&#xff0c;但是都是网盘或者迅雷下载&#xff0c;或者游戏盒子下载&#xff0c;速度都很慢。这款软件是用steam下载的&am…

《Windows API每日一练》9.1 资源-图标

本节讲述图标、鼠标指针位图、字符串资源表、自定义资源的添加和应用。 本节必须掌握的知识点&#xff1a; 图标 第56练&#xff1a;ICON图标资源 鼠标指针位图 字符串资源表 自定义资源 第57练&#xff1a;字符串资源表和自定义资源 9.1.1 图标 在 Windows 窗口编程中&…

机场的出租车问题折线图

分析并可视化机场离场车辆数数据 本文将详细介绍如何使用Python的正则表达式库re和绘图库matplotlib对机场离场车辆数数据进行分析和可视化。以下是具体步骤和代码实现。 数据资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rU-PRhrVSXq-8YdR6obc6Q?pwd1234 提…

AutoCAD 2025:探索设计的未来

AutoCAD 2025是Autodesk公司推出的一款最新版本的计算机辅助设计&#xff08;CAD&#xff09;软件。作为一名长期使用AutoCAD的用户&#xff0c;我深感这款软件在设计、绘图和建模方面的卓越性能。以下是我对AutoCAD 2025功能的详细介绍以及我的使用体验。 AutoCAD 2025的主要…

Linux学习笔记(二)账户和组

一、基本概念 用 户&#xff1a;用户id&#xff0c;被称为UID 基本组&#xff1a;账户id&#xff0c;被称为GID。用户只能加一个基本组。 0代表超级管理员&#xff0c;root账号。 附加组&#xff1a;用户能加多个基本组。 二、添加账户和组 创建用户名tom&#xff0c;失效…

星间链路与星地链路

目录 一、星间链路 1.1 层内星间链路&#xff08;Intra-layer ISLs&#xff09; 1.2 层间星间链路&#xff08;Inter-layer ISLs&#xff09; 1.3 实现方式 1.3.1 微波链路 1.3.2 激光链路 二、星地链路 2.1 星地链路的关键特性 2.1.2 Ka信关站 2.1.2 Q/V信关站 2.1…

【uniapp-ios】App端与webview端相互通信的方法以及注意事项

前言 在开发中&#xff0c;使用uniapp开发的项目开发效率是极高的&#xff0c;使用一套代码就能够同时在多端上线&#xff0c;像笔者之前写过的使用Flutter端和webview端之间的相互通信方法和问题&#xff0c;这种方式本质上实际上是h5和h5之间的通信&#xff0c;网上有非常多…

科研绘图系列:R语言分组柱状图一(Grouped Bar Chart)

介绍 分组柱状图(Grouped Bar Chart)是一种数据可视化图表,用于比较不同类别(分组)内各子类别(子组)的数值。在分组柱状图中,每个分组有一组并列的柱子,每个柱子代表一个子组的数值,不同的分组用不同的列来表示。 特点: 并列柱子:每个分组内的柱子是并列的,便于…

【LLM】二、python调用本地的ollama部署的大模型

系列文章目录 往期文章&#xff1a; 【LLM】一、利用ollama本地部署大模型 目录 文章目录 前言 一、ollama库调用 二、langchain调用 三、requests调用 四、相关参数说明&#xff1a; 总结 前言 本地部署了大模型&#xff0c;下一步任务便是如何调用的问题&#xff0c…

科普文:K8S中常见知识点梳理

简单说一下k8s集群内外网络如何互通的 要在 Kubernetes&#xff08;k8s&#xff09;集群内外建立网络互通&#xff0c;可以采取以下措施&#xff1a; 使用service&#xff1a; 使用Service类型为NodePort或LoadBalancer的Kubernetes服务。这可以使服务具有一个公共IP地址或端口…

探展2024世界人工智能大会之令人惊艳的扫描黑科技~

文章目录 ⭐️ 前言⭐️ AIGC古籍修复文化遗产焕新⭐️ 高效的文档图像处理解决方案⭐️ AIGC扫描黑科技一键全搞定⭐️ 行业级的知识库大模型加速器⭐️ 结语 ⭐️ 前言 大家好&#xff0c;我是 哈哥&#xff08;哈哥撩编程&#xff09;&#xff0c;这次非常荣幸受邀作为专业…

基于单片机的太阳能智能追光系统设计

摘 要&#xff1a; 光伏能源是一种发电新能源&#xff0c;具有高清洁度、高再生的特点&#xff0c;在能源紧张的当代其应用价值极高。目前&#xff0c;光伏能源发电主要利用光伏设备来实现&#xff0c;但在初期应用过程中&#xff0c;人们发现&#xff0c;太阳光的移动会决定光…

ElasticSearch学习篇14_《检索技术核心20讲》进阶篇之大倒排索引

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 内容 主要是海量数据的大倒排索引的一些原理设计思想&#xff0c;ES底层就是基于这些设计思想以及原理&#xff0c;主要涉及读写分离、索引分层等…

C++ | Leetcode C++题解之第223题矩形面积

题目&#xff1a; 题解&#xff1a; class Solution { public:int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {int area1 (ax2 - ax1) * (ay2 - ay1), area2 (bx2 - bx1) * (by2 - by1);int overlapWidth min(ax2, bx2) - max…

vb.netcad二开自学笔记9:界面之ribbon

一个成熟的软件怎么能没有ribbon呢&#xff0c;在前面的框架基础上再加个命令AddRibbon <CommandMethod("AddRibbon")> Public Sub AddRibbon() Dim ribbonControl As RibbonControl ComponentManager.Ribbon Dim tab As RibbonTab New RibbonTab() tab.Tit…

# 昇思25天学习打卡营第10天 | 使用静态图加速

昇思25天学习打卡营第10天 | 使用静态图加速 文章目录 昇思25天学习打卡营第10天 | 使用静态图加速动态图的开启方式静态图的开启方式基于全局context的开启方式基于修饰器的开启方式 总结打卡 AI编译框架分为两种运行模式&#xff1a; 动态图模式&#xff1a; 计算图的构建和计…

近红外光谱脑功能成像(fNIRS):2.实验设计、指标计算与多重比较

一、实验设计的策略与方法 近红外光谱成像&#xff08;INIRS&#xff09;作为一种非侵入性脑功能成像技术&#xff0c;为研究大脑活动提供了一种高效、生态效度高的方法。然而&#xff0c;为了充分利用INIRS技术并确保实验结果的准确性和可靠性&#xff0c;研究者必须精心设计实…

AGAST (角点检测)

AGAST检测原理 AGAST(Adaptive and Generic Accelerated Segment Test)算法是Elmar于2010年提出的特征检测算法,改进了FAST(Features from Accelerated Segment Test)特征检测方法,使其具有更快的速度和更好的鲁棒性。AGAST算法提供了比FAST算法更详细的特征标记方式和判断依…

DWM 相关实现代码 [自用]

1. DWM 缩略图和模糊隐藏实现半透明 #include <windows.h> #include <dwmapi.h> #include <string> #pragma comment(lib, "dwmapi.lib")// 检查 UWP 窗口是否可见 bool IsUWPWindowVisible(HWND hwnd) {DWORD cloaked 0;DwmGetWindowAttribute(…

matplotlib颜色对照表

matplotlib的色彩设置: #------------------------------------------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------------------…