【H5 Canvas】一篇通

文章目录

        • 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,0context.translate(150,75); //将坐标迁移道中心点150,75
context.fillStyle='silver';
context.fillRect(0,0,300,150);//此时0,0 相对于新坐标原点150,75context.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:1context.scale(.5,.5); //缩小为原来坐标的一半,1:0.5
context.fillStyle='silver';
context.fillRect(0,0,300,150);//此时300相当于150,150相当于75context.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.hqwc.cn/news/218732.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载通信架构 —— 传统车内通信网络FlexRay(较高速度高容错、较灵活拓扑结构)

车载通信架构 —— 传统车内通信网络FlexRay(较高速度高容错、较灵活拓扑结构) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,…

运维高级-day01

shell回顾 1、快速生成版权控制信息&#xff0c;具体的内容自己替换 [root scripts]# cat ~/.vimrc autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" func SetTitle() if expand("%:e") sh call setline(1,"#!/bin/bash")…

佳易王各行业收银管理系统软件,企业ERP管理软件,企业或个体定制开发软件以及软件教程资源下载总目录,持续更新,可关注收藏查阅

系统简介 1、佳易王软件功能实用、操作简单、软件绿色免安装&#xff0c;解压即可使用&#xff0c;软件已经内置数据库&#xff0c;不需再安装其他数据库文件。 2、佳易王软件&#xff0c;已经形成系列&#xff0c;上百款管理系统软件涵盖多个行业。 3、已为多个企业个体定制…

STM32-使用固件库新建工程

参考链接: 【入门篇】11-新建工程—固件库版本&#xff08;初学者必须认认真真看&#xff09;_哔哩哔哩_bilibili 使用的MCU是STM32F103ZET6 。 这篇参考的是野火的资料&#xff0c;可以在“野火大学堂”或者它的论坛上下载。&#xff08;我通常是野火和正点原子的资料混着看的…

Android逆向实战 - MIUI调起三方应用系统拦截弹窗分析

近期&#xff0c;发现在部分Android手机调起其他应用时&#xff0c;会弹出一个系统弹窗拦截调起&#xff0c;需要用户二次确认。经过内部众测&#xff0c;发现绝大多数是小米手机&#xff0c;而且跟Android版本没有直接关系&#xff0c;猜测是MIUI某次升级引入的功能。这篇文章…

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

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

在 Go 中使用 Protocol Buffers

各位准备好了吗&#xff01;这一次&#xff0c;我们将深入探讨 Protocol Buffers&#xff08;protobuf&#xff09;及其在数据序列化中的超能力所在。 介绍 Protocol Buffers&#xff0c;也被称为 protobuf&#xff0c;是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

【小沐学写作】原型设计工具汇总(Axure RP)

文章目录 1、简介2、Axure RP2.1 工具简介2.2 工具特点2.2.1 互动事件2.2.2 条件逻辑2.2.4 工作表格2.2.5 多状态容器2.2.6 数据驱动接口2.2.7 自适应视图2.2.8 流程图 2.3 工具安装2.3.1 安装2.3.2 运行 2.4 使用费用2.5 工具体验2.5.1 登陆框制作 3、其他3.1 Figma3.2 Adobe …

redis持久化:RDB和AOF

目录 RDB 持久化 1、修改配置文件&#xff1a;redis.conf 2、RDB模式自动触发保存快照 3、RDB模式手动触发保存快照 4、RDB的优缺点 AOF持久化 1、AOF持久化工作流程 2、修改配置文件开启AOF 3、AOF优缺点 4、AOF的重写机制原理 RDBAOF混合模式 redis持久化有两种方…

5.1每日一题(无穷级数敛散性的判断:莱布尼兹准则、p级数、绝对收敛、条件收敛、比较法/比较法的极限形式)

莱布尼兹准则&#xff1a;&#xff08;1&#xff09;单调递减&#xff1b;&#xff08;2&#xff09;极限 -> 0 绝对收敛&#xff1a;级数的绝对值收敛 条件收敛&#xff1a;级数的绝对值发散 p级数的次幂 <1 时发散 &#xff1b;>1时收敛

30系列显卡在ubuntu下不能满血运行的问题

之前发现在ubuntu下&#xff0c;我的3080只能跑115w最高&#xff0c;而这在win下是可以跑165w的。于是乎google了所有结果&#xff0c;无解… 现已经过去一年&#xff0c;显卡价格飞涨&#xff0c;无奈只能使用笔记本跑自己的代码了。结果发现nvidia推了Linux下的动态加速&…

java学习part11继承

1.类的继承 继承为了让类之间建立联系&#xff0c;同时复用代码。 子类和父类的同名函数构成重写&#xff0c;能覆盖&#xff0c;除非用super.xx()调。 同名属性不会覆盖&#xff0c;而是并存&#xff0c;用super.xx调。 2.子类初始化 子类会自动调用父类无参构造super() 3.重…