【 一篇通】H5 Canvas

news2025/2/23 20:01:10

文章目录

        • 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/1253311.html

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

相关文章

BER编码规则

文章目录 一、BER 编码规则介绍二、BER编码数据组成三、Identifier octets Type1. tag class 分类2. p/c 分类3 tag type4. ASN.1的原始数据类型&#xff08;TAG&#xff09; 四、 Length octets1、定长的短格式2、不定长格式3、保留格式 五、Contents octets六 、BER编码番外 …

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法 2023/11/25 23:00 缘起&#xff0c;在拼多多买了2片10TB的7200rpm的日立二手硬盘。 型号&#xff1a;日立 mar-2018 10T硬盘 接上电脑&#xff0c;硬盘感觉在转动了【正常上电了。】 但是X99主板&#xff0c;在WIN10下就…

leetcode设计循环队列(链表方式来实现)

上次我们那个设计循环队列的时候用的是数组&#xff0c;因为那个时候还是不太会链表&#xff0c;现在有了链表的思路&#xff0c;我们一起来看看解题步骤吧。 https://leetcode.cn/problems/design-circular-queue/description/ 设计循环队列 那我们其实最主要的就是我们这个…

时间序列预测实战(十九)魔改Informer模型进行滚动长期预测(科研版本)

论文地址->Informer论文地址PDF点击即可阅读 代码地址-> 论文官方代码地址点击即可跳转下载GIthub链接 个人魔改版本地址-> 文章末尾 一、本文介绍 在之前的文章中我们已经讲过Informer模型了&#xff0c;但是呢官方的预测功能开发的很简陋只能设定固定长度去预测未…

微软 Edge 浏览器目前无法支持 avif 格式

avif 格式在微软 Edge 浏览器中还是没有办法支持。 如果你希望能够查看 avif 格式&#xff0c;那么只能通过浏览器打开&#xff0c;然后浏览器将会把这个文件格式下载到本地。 avif 格式已经在其他的浏览器上得到了广泛的支持&#xff0c;目前不支持的可能就只有 Edge 浏览器。…

drool 7 multiThread 测试

基本信息 通过option &#xff0c;使用如下代码进行设置 //线程数量10MaxThreadsOption optionMaxThreadsOption.get(10);kieBaseConf.setOption(option);kieBaseConf.setOption(MultithreadEvaluationOption.YES);并发是以CompositeDefaultAgenda/Rule为颗粒度来的&#xff0…

Linux篇:文件管理

一、共识原理&#xff1a; 1. 文件内容属性&#xff0c;内容与属性都是数据&#xff0c;都要在磁盘中保存。 2. 文件分为打开的文件和没打开的文件。 3. 研究打开的文件&#xff1a;本质是研究进程和文件的关系&#xff0c;因为是进程负责打开文件。 4. 没打开的文件在存储介质…

【docker】docker的基础命令

基础操作 docker info #查看docker的基本信息docker version #查看docker版本信息一、镜像操作 1、搜索镜像 docker search nginx2、下载镜像 docker pull nginx#从仓库中下载镜像&#xff0c;若没有指定标签&#xff0c;则下载最新的版本&#xff0c;也就是标签为: lat…

使用 STM32 读取和解析 NTC 热敏电阻的数值

本文介绍了如何利用 STM32 微控制器读取和解析 NTC&#xff08;Negative Temperature Coefficient&#xff09;热敏电阻的数值。首先&#xff0c;我们将简要介绍 NTC 热敏电阻的原理和特性。接下来&#xff0c;我们将详细讨论如何设计电路连接和采用合适的 STM32 外设进行数值读…

【超强笔记软件】Obsidian实现免费无限流量无套路云同步

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f; 目录 一、简介 软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群…

docker介绍、部署与常用命令

一、docker 介绍 1、容器&#xff08;Container&#xff09;&#xff1a; (1) 概念&#xff1a; 容器是一种用于运行和部署应用程序的技术。它将应用程序及其所有依赖项&#xff08;例如代码、运行时、系统工具、系统库等&#xff09;打包在一个独立的、可移植的运行环境中&…

Java多态:多态多态,多么变态

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、重写1、重写的规则2、重写与重载的区别 二、多态1、多态的概念2、多态的实现3、向上转移和向下转型Ⅰ、向上转型Ⅱ、向下转…

Linux加强篇004-Vim编辑器与Shell命令脚本

目录 前言 1. Vim文本编辑器 1.1 编写简单文档 1.2 配置主机名称 1.3 配置网卡信息 1.4 配置软件仓库 2. 编写Shell脚本 2.1 编写简单的脚本 2.2 接收用户的参数 2.3 判断用户的参数 3. 流程控制语句 3.1 if条件测试语句 3.2 for条件循环语句 3.3 while条件循环语…

spring aop核心原理概念

目录 概述aop核心概念解析Target(目标对象)Joinpoint(连接点)Advice(通知/增加)Pointcut(切入点)Aspect(切面)Advisor(通知器)Weaving(织入)Proxy(代理)Introduction(引介) 结束 概述 aop核心概念解析 Target(目标对象) 代理的目标对象 目标对象(Target)的确立&#xff0c;是…

C++ 实现位图

引出 面试题&#xff1a;给出 40 亿个不重复的无符号整数&#xff0c;没有排过序。给定一个无符号整数&#xff0c;如何快速判断这个数是否在这 40 亿个无符号整数中。[ 腾讯面试题 ] 想法一&#xff1a;将 40 亿个数据存放到 set 里面&#xff0c;然后再查找指定的无符号整数。…

深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧,GPU是一种专门用于处理大量并行操作的硬件设备,它的架构设计主要是为了图形渲染。然而,由于其并行处理能力,现在广泛应用于深度学习、科学计算等领域。主要的GPU制造商…

运维高级--centos7源码安装Apache

安装必要的依赖项&#xff1a; sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel这将安装编译和构建所需的基本工具&#xff0c;以及 Apache HTTP Server 所需的一些依赖项。 下载 Apache HTT…

从0到0.01入门 Webpack| 008.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【网络】DNS协议、ICMP协议、NAT技术

DNS协议、ICMP协议、NAT技术 一、DNS协议1、产生背景2、域名简介3、域名解析的工作流程4、使用dig工具分析DNS过程 二、ICMP协议1、ICMP介绍2、ICMP协议格式3、ping命令4、traceroute命令 三、NAT技术1、NAT技术背景2、NAT IP转换过程3、地址转换表4、NAPT技术5、重新理解路由器…

JsonRPC协议详解(协议介绍、请求示例、响应示例)

JsonRPC协议详解 什么是RPC&#xff1f; RPC&#xff08;远程过程调用&#xff09;是一种用于实现分布式系统中不同进程或不同计算机之间通信的技术。它允许我们像调用本地函数一样调用远程计算机上的函数&#xff0c;使得分布式系统的开发变得更加简单和高效。 什么是JsonRP…