【H5 Canvas】一篇通

news2025/4/8 14:37:57

文章目录

        • Canvas的创建(HTMLCanvasElement)
        • 图形绘制:H5为Canvas对应的2D上下文Context提供了一系列的画图接口
        • 保存save、恢复restore、变换Transformations

Canvas的创建(HTMLCanvasElement)
  • 定义canvas HTML元素,默认长宽300x150
<canvas width="300" height="150" >
    你的浏览器不支持Canvas
</canvas>
  • 通过JavaScript脚本创建
let canvas = document.createElement("canvas");
图形绘制:H5为Canvas对应的2D上下文Context提供了一系列的画图接口
  • 获取Context(CanvasRenderingContext2D)
let context = canvas.getContext("2d");
  • 矩形的绘制(填充、清除、轮廓)(x坐标,y坐标,宽度,高度)
context.fillStyle = "rgb(200,0,0)"; // 设置填充颜色
context.strokeStile = "rgb(0,200,0)" // 设置轮廓颜色
context.fillRect (90, 90, 190, 190);// 填充一个大区域
context.clearRect(130,130,110,110);// 清除中间一个区域
context.strokeRect(150,150,70,70);// 在清除的区域中画一个矩形轮廓

在这里插入图片描述

  • 直线的绘制(需要借助stroke函数)
context.strokeStyle="purple"; //设置线条颜色
context.lineCap="round";//端点样式为圆形
context.lineWidth=10;//线条宽度10
context.moveTo(10,10);//线条开始左边
context.lineTo(200,120);//线条结束坐标
context.stroke()// 借助stroke显示线条

在这里插入图片描述

  • 圆弧的绘制(填充、轮廓,需要借助fill,stroke函数)(x坐标,y坐标,半径,开始弧度,结束弧度,是否逆时针)
context.beginPath();// 开启一个新路径
context.fillStyle='yellow' // 上面大半圆填充为黄色
context.arc(75, 75, 50, 0, Math.PI, true);
context.fill() // 填充让上面大半圆显示出来
context.beginPath();//如果没有这一行,最后填充将使用下面pink
context.fillStyle='pink' // 下面半圆填充为粉色
context.strokeStyle='black' // 下面半圆轮廓为黑色
context.arc(75, 75, 35, 0, Math.PI, false);//顺时针绘制下面小半圆
context.fill();// 显示下半圆填充
context.stroke();// 只对下面半圆画轮廓

在这里插入图片描述

  • 图片绘制
context.fillStyle='pink';
context.fillRect(0,0,300,150)
// context.drawImage(img,srcx,srcy);
context.drawImage(img,10,10);

在这里插入图片描述

context.fillStyle='pink';
context.fillRect(0,0,300,150)
// context.drawImage(img,srcx,srcy,src,srcwith,srcheight);
context.drawImage(img,10,10,100,100);

在这里插入图片描述

context.fillStyle='pink';
context.fillRect(0,0,300,150)
// context.drawImage(img,srcx,srcy,srcw,srch,dstx,dsty,dstw,dsth);
context.drawImage(img,20,20,110,110,90,10,120,120);

在这里插入图片描述

  • 渐变绘制(需要借助fill/fillRect函数)
let linGrad = context.createLinearGradient(0, 0, 250, 0);// 渐变方向,水平方向从左往右
linGrad.addColorStop(0, "lime");
linGrad.addColorStop(0.5, "navy");
linGrad.addColorStop(1, "pink");
context.fillStyle = linGrad;
context.fillRect(10, 10, 280, 120); // 填充渐变

在这里插入图片描述

保存save、恢复restore、变换Transformations
  • 保存save和恢复restore结对使用,用于将当前canvas的状态(旋转,缩放,迁移)进行入栈保存/出栈恢复操作

  • translate 改变坐标原点

context.fillStyle='red';
context.fillRect(0,0,300,150);

context.save(); // 保存当前canvas状态,坐标原点为0,0

context.translate(150,75); //将坐标迁移道中心点150,75
context.fillStyle='silver';
context.fillRect(0,0,300,150);//此时0,0 相对于新坐标原点150,75

context.restore(); //恢复到坐标原点为0,0
context.fillStyle='pink';
context.fillRect(0,0,60,60);

在这里插入图片描述

  • scale x,y坐标缩放
context.fillStyle='red';
context.fillRect(0,0,300,150);

context.save(); // 保存当前canvas状态,坐标比例1:1

context.scale(.5,.5); //缩小为原来坐标的一半,1:0.5
context.fillStyle='silver';
context.fillRect(0,0,300,150);//此时300相当于150,150相当于75

context.restore(); //恢复到坐标比例1:1
context.fillStyle='pink';
context.fillRect(0,0,60,60);

在这里插入图片描述

  • rotate 图形旋转
context.lineWidth=5;
// 没有旋转下 水平画紫色线
context.beginPath();
context.strokeStyle="purple"; 
context.moveTo(10,10);
context.lineTo(300,10);
context.stroke()

context.save(); // 保存当前canvas状态,没有旋转
// 旋转下,水平画黑线
context.rotate(Math.PI/4); //将坐标旋转45度
context.beginPath();
context.strokeStyle="black"; 
context.moveTo(10,10);
context.lineTo(300,10);
context.stroke()

context.restore(); //恢复到不旋转
// 没有旋转下 水平画绿色线
context.beginPath();
context.strokeStyle="green"; 
context.moveTo(10,20);
context.lineTo(300,20);
context.stroke()

![在这里插入图片描述](https://img-blog.csdnimg.cn/448609dc1a5b432db18c0c98b92baba3.png

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

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

相关文章

利用chart.js来完成动态网页显示拆线图的效果

<% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><%! String list"[一月份, 二月份, 三月份,四月份, 五月份, 六月份, 七月]"; String label"我的一个折线图"; String data &qu…

RocketMq架构和源码解析

NameServer&#xff1a;作为注册中心&#xff0c;提供路由注册、路由踢出、路由发现功能&#xff0c;舍弃强一致&#xff0c;保证高可用&#xff0c;集群中各个节点不会实时通讯&#xff0c;其中一个节点下线之后&#xff0c;会提供另外一个节点保证路由功能。 Broker&#xf…

为什么网上大量程序员卡35岁年龄招聘,而从来不报道测试、技术支持、售前售后工程师呢?

其实&#xff0c;网上只报道程序员卡35岁&#xff0c;这个说法并不成立。 而是普遍卡35岁&#xff0c;但并没有明确的一个职业类别。 随便搜一下&#xff0c;一眼望过去&#xff0c;其实已经波及很多行业了。 但如果你把IT从业人员合并报道&#xff0c;确实容易给人一种“程序…

Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/4)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

【Go实现】实践GoF的23种设计模式:备忘录模式

上一篇&#xff1a;【Go实现】实践GoF的23种设计模式&#xff1a;命令模式 简单的分布式应用系统&#xff08;示例代码工程&#xff09;&#xff1a;https://github.com/ruanrunxue/Practice-Design-Pattern–Go-Implementation 简介 相对于代理模式、工厂模式等设计模式&…

红队攻防实战系列一之metasploit

百目无她&#xff0c;百书质华&#xff0c;君当醒悟&#xff0c;建我中华 本文首发于先知社区&#xff0c;原创作者即是本人 前言 在红队攻防中&#xff0c;我们主要在外网进行信息收集&#xff0c;通过cms或者其他漏洞拿到shell&#xff0c;之后通过免杀木马将windows或lin…

【通讯协议】gRPC和Webhook

RPC&#xff08;Remote procedure Call&#xff09;之所以被称为“远程”&#xff0c;是因为在微服务架构下&#xff0c;当服务部署到不同的服务器上时&#xff0c;它可以实现远程服务之间的通信。从用户的角度来看&#xff0c;它的作用就像本地函数调用。 下图说明了gRPC的整…

java io 流,输入流和输出流;节点流和处理流;字节流和字符流

文章目录 java 中 IO 流分为几种?按照流的流向分&#xff0c;可以分为输入流和输出流&#xff1b;按照流的角色划分为节点流和处理流。IO流主要的分类方式有以下3种&#xff1a; java中的IO流也是工作中使用到比较频繁的一个内容&#xff0c;今天以这篇文章来了解它的概念和整…

第十七章 解读PyTorch断点训练(工具)

主要有以下几方面的内容&#xff1a; 对于多步长训练需要保存lr_schedule初始化随机数种子保存每一代最好的结果 简单详细介绍 最近在尝试用CIFAR10训练分类问题的时候&#xff0c;由于数据集体量比较大&#xff0c;训练的过程中时间比较长&#xff0c;有时候想给停下来&…

下一代图片压缩格式 AVIF

长期以来我们都在为了在网络上使用什么样的图片格式而进行纠结。我们所熟知的或者运用到 Web 应用中的图片格式无非就是 PNG、JPG、GIF、SVG 或者 WebP。 HEIC是一种图像格式&#xff0c;上线时间还比较短&#xff0c;只有4年左右。 自iOS 11和 macOS High Sierra&#xff08…

基于 Gin 的 HTTPS 代理 Demo

上次写了 基于 Gin 的 HTTP 代理 Demo 之后&#xff0c;对这方面还是蛮感兴趣的&#xff0c;所以就接着继续走下去。为了这个主题的内容&#xff0c;我斥巨资购入了一本二手的 《HTTP 权威指南》&#xff0c;因为我知道这本书里面有我想要的知识。在我还在大学的时候&#xff0…

Kerberos 高可用配置和验证

参考 https://cloud.tencent.com/developer/article/1078314 https://mp.weixin.qq.com/s?__bizMzI4OTY3MTUyNg&mid2247485861&idx1&snbb930a497f63ac5e63ed20c64643eec5 机器准备 Kerberos主 ip-172-31-22-86.ap-southeast-1.compute.internal 7.common2.hado…

美国季节性干旱数据集

美国季节性干旱数据集 美国干旱展望栅格数据集由国家气象局气候预测中心生成。它在每个月的最后一天发布&#xff0c;提供下个月的干旱前景信息。“美国季节性干旱展望”数据集每月发布一次&#xff0c;特别是每月的第三个星期四。该数据集对美国不同地区发生干旱的可能性进行…

Linux加强篇005-用户身份与文件权限

目录 前言 1. 用户身份与能力 2. 文件权限与归属 3. 文件的特殊权限 4. 文件的隐藏属性 5. 文件访问控制列表 6. su命令与sudo服务 前言 悟已往之不谏&#xff0c;知来者之可追。实迷途其未远&#xff0c;觉今是而昨非。舟遥遥以轻飏&#xff0c;风飘飘而吹衣。问征夫以…

AIGC创作系统ChatGPT网站源码、支持最新GPT-4-Turbo模型、GPT-4图片对话能力+搭建部署教程

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

居家适老化设计第三十一条---卫生间水龙头

以上产品图片均来源于淘宝 侵权联系删除 居家适老化中&#xff0c;水龙头是一个非常重要的设备。水龙头的选择应该考虑到老年人的特点和需求。首先&#xff0c;水龙头的操作应该简单方便&#xff0c;老年人手部灵活性可能不如年轻人&#xff0c;因此水龙头应该设计成易于转动和…

计算机网络常考计算题之循环冗余校验(宝典教学)

文章目录 奇偶效验循环冗余校验例题四步走另一种题型 本文讲述了计算机考研中易出现的循环冗余校验&#xff0c;点赞关注收藏不迷路哦 我是一名双非计算机本科生&#xff0c;希望我的文章可以帮助到你。 奇偶效验 奇偶校验&#xff1a;也可以检测数据在传输过程中是否出现错误…

Ceph----RBD块存储的使用:详细实践过程实战版

RBD 方式的 工作 流程&#xff1a; 1、客户端创建一个pool&#xff0c;并指定pg数量&#xff0c;创建 rbd 设备并map 到文件系统&#xff1b; 2、用户写入数据&#xff0c;ceph进行对数据切块&#xff0c;每个块的大小默认为 4M&#xff0c;每个 块名字是 object序号&#xff…

【UnLua】在 Lua 中定义 UE 反射类型

【UnLua】在 Lua 中定义 UE 反射类型 用法 启动编辑器时遍历 Defines 目录下 lua 脚本来加载 UE 反射类型&#xff08;开个临时的 Lua VM 即可&#xff09;直接像 -- define a uenum in lua UEnum.EEnumGuestSomethingElse {Value1 1;Value2 2; }-- use it like a native …

算法基础之单链表

单链表 核心思想&#xff1a; 用数组模拟链表(new节点非常慢 用数组模拟快) e[N] 表示节点value ne[N]表示next指针指向 (空节点为-1) #include<iostream>using namespace std;const int N100010;//head头结点的指针//e[N] 表示节点value ne[N]表示next指针指向 //idx…