把Canvas捡起来吧!

canvas介绍

canvas是HTML5新增的一种新特性,一种使用JavaScript绘制图形的HTML元素。

基本使用

<canvas id="example" width="300" height="300" />

使用

矩形:

var canvas =  document.getElementById("example");

var ctx = canvas.getContext("canvas"); // 获取canvas上下文

if (!ctx)  return; // 支持检测

ctx.fillStyle = "rgb(200,0,0)"; // 设置颜色

/******************************** 矩形 *********************************/

ctx.fillRect(10,10,55,50); // 绘制一个矩形 参数说明(x坐标,y坐标,宽度,高度)

ctx.strokeRect(10,10,55,50); // 绘制一个矩形的边框 参数说明(x坐标,y坐标,宽度,高度)

ctx.clearRect(10,10,55,50); // 清楚指定的矩形区域,这块区域会完全透明

/******************************** 绘制路径 *********************************/
ctx.beginPath(); // 新建一条Path

ctx.moveTo(50,50); // 把画笔移动到指定的坐标

ctx.lineTo(200,50); // 绘制一条从当前位置到(200,50)的直线

ctx.closePath(); // 标识结束,会拉一条从当前点到path起点的直线,如果当前点与起点重合,则什么都不做

ctx.stroke(); // 绘制

ctx.fill(); // 填充闭合区域

ctx.arc(50,50,40,0,Math.PI / 2,false); // 绘制一条曲线 参数说明(x坐标,y坐标,r半径,弧度开始的位置,弧度结束的位置,是否顺时针方向) 记住第四个和第五个为0时代表x轴正方向

ctx.arcTo(200,50,200,200,100); // 绘制一条曲线2 参数说明(控制第一个x坐标,控制第一个y坐标,控制第二个x坐标,控制第二个y坐标,圆弧半径)



实战:绘制贝塞尔曲线

	var canvas = document.getElementById('tutorial');
    if (!canvas.getContext) return;
    var ctx = canvas.getContext("2d");
    ctx.beginPath();
    ctx.moveTo(10, 200); //起始点
    var cp1x = 40, cp1y = 100;  //控制点
    var x = 200, y = 200; // 结束点
    //绘制二次贝塞尔曲线
    ctx.quadraticCurveTo(cp1x, cp1y, x, y);
    ctx.stroke();
 
    ctx.beginPath();
    ctx.rect(10, 200, 10, 10);
    ctx.rect(cp1x, cp1y, 10, 10);
    ctx.rect(x, y, 10, 10);
    ctx.fill();

添加颜色:

var canvas = document.getElementById('tutorial');
  if (!canvas.getContext) return;
  var ctx = canvas.getContext("2d");
  for (var i = 0; i < 6; i++){
    for (var j = 0; j < 6; j++){
      ctx.fillStyle = 'rgb(' + Math.floor(255 - 42.5 * i) + ',' +
        Math.floor(255 - 42.5 * j) + ',0)'; // 设置颜色
      ctx.fillRect(j * 50, i * 50, 50, 50); // 填充颜色
    }
  }
  1. color 可以是表示css颜色值的字符串、渐变对象或者图案对象
  2. 默认情况下,线条和填充颜色都是黑色
  3. 一旦设置了 strokeStyle(设置图形轮廓颜色)或者fillStyle,那么这个新值会成为新绘制图形的默认值。如果你要给每个不同图形上不同的颜色,你需要重新设置fillStyle或者strokeStyle的值。

线条参数:

ctx.lineWidth = 10; //设置线条宽度为10
ctx.lineCap = [type]; // 设置线条末端样式,type 值有 :butt 方形、round圆形、square方形,但是增加了一个宽度和线段相同,高度是线段厚度一般的矩形区域
ctx.lineJoin = [type]; // 在同一个path中设置链接时候的样式,type 值有 :bevel 独立拐角、round圆形底、miter(默认)形成一个额外的菱形区域

ctx.setLineDash([20,5]); // 设置虚线,[实现长度,间隙长度]

ctx.lineDashOffset = -0; // 设置起始偏移量

绘制文本:


ctx.font = "文本样式"; // 设置文本样式

ctx.textAlign = "对其方式"; // 参数有 start end left right center

ctx.textBaseline = "基线对其选项"; // 参数有 top hanging middle alphabetic ideographic bottom

ctx.direction = "对本方向"; // ltr rtl inherit

ctx.fillText("Hello world",10,100); // 填充文本 参数说明:(文本,x轴位置,y轴位置,[,绘制最大宽度])

ctx.strokeText("Hello world",10,100); // 填充文本边框 参数说明:(文本,x轴位置,y轴位置,[,绘制最大宽度])

绘制图片

var img = new Image(); // 创建一个img元素

img.src = "img.jpg"; // 设置地址

ctx.drawImage(img,0,0); // 绘制一个图片 参数:(要绘制的图片,坐标x,坐标y,[,设置宽度,设置高度,切片x坐标,切片y坐标,切片宽度,切片高度])

状态的保存和恢复

save() 将Canvas状态存储在栈中,每当save被调用时,当前状态就会被推送到栈中保存

restore 将Canvas栈中的数据弹出。

 ctx.fillRect(0, 0, 150, 150);   // 使用默认设置绘制一个矩形
    ctx.save();                  // 保存默认状态
 
    ctx.fillStyle = 'red'       // 在原有配置基础上对颜色做改变
    ctx.fillRect(15, 15, 120, 120); // 使用新的设置绘制一个矩形
 
    ctx.save();                  // 保存当前状态
    ctx.fillStyle = '#FFF'       // 再次改变颜色配置
    ctx.fillRect(30, 30, 90, 90);   // 使用新的配置绘制一个矩形
 
    ctx.restore();               // 重新加载之前的颜色状态
    ctx.fillRect(45, 45, 60, 60);   // 使用上一次的配置绘制一个矩形
 
    ctx.restore();               // 加载默认颜色配置
    ctx.fillRect(60, 60, 30, 30);   // 使用加载的配置绘制一个矩形

变形

translate

 var ctx = canvas.getContext("2d");
    ctx.save(); //保存坐原点平移之前的状态
    ctx.translate(100, 100); // 偏移,参数说明(x左右偏移量,y上下偏移量)
    ctx.strokeRect(0, 0, 100, 100)
    ctx.restore(); //恢复到最初状态
    ctx.translate(220, 220);
    ctx.fillRect(0, 0, 100, 100)

rotate

 ctx.rotate(Math.PI / 180 * 45); // 旋转,只接受一个参数,表度数
 ctx.fillStyle = "blue";
 ctx.fillRect(0, 0, 100, 100);

scale

ctx.scale(.8,.7); // 缩放,参数(x轴缩放因子,y轴缩放因子)

transform

在这里插入图片描述

transform(a, b, c, d, e, f)

参数说明:

  • a: 水平缩放
  • b:水平倾斜
  • c:垂直倾斜
  • d:垂直缩放
  • e:水平移动
  • f:垂直移动

合成

ctx.globalCompositeOperation = "source-over"; // 全局合成操作 参数: 
// source-in 只出现新图像和原来图像重叠的部分,
// source-out 只出现新图像没有重叠的部分,老图像也不显示,
// source-atop 只出现老图像和新图像重叠的部分,
// destination-over 新图片会在老图片下面,
// destination-in 只出现老图片和重叠部分,
// destination-out 只出现老图片没有重叠部分,
// destination-atop显示新图片以及重叠部分,重叠部分为老图像,
// lighter 重叠部分为两种夜色混合
// darken 重叠部分为黑色
// lighten 重叠部分比较进制,每位为最大的
// xor 重叠部分透明
// copy 只有新图像会保留,其余清除

裁剪路径

 ctx.arc(20,20, 100, 0, Math.PI * 2);
 ctx.clip() // 只能遮罩在这个方法调用之后绘制的图像,如果是 clip() 方法调用之前绘制的图像,则无法实现遮罩。
 ctx.fillStyle = "pink";
 ctx.fillRect(20, 20, 100,100);

动画

一般使用下面三种方法:

 setInterval()
setTimeout()
requestAnimationFrame()

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

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

相关文章

MFC综合实验二学习记录

文章目录 虚函数和纯虚函数的区别&#xff1f;MFC中什么是UPDATE_COMMAND_UI 消息如何查看控件对应的成员变量模态对话框的理解HGDIOBJ" 类型的值不能用于初始化 "CBrush *" 类型的实体错误MFC编程中CDC类型和HDC类型有什么区别&#xff1f;关于WIDING和ALTERNA…

01-SpringCloud微服务入门

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.1.单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打…

使用运程操作电脑向日葵安装MySQl与Navicat的安装

目录 一、向日葵 1.1、简介 1.2、应用场景 1.3、原理&#xff1a; 1.4、使用&#xff1a; 1.5、在实施中的应用场景&#xff1a; 二、在Windows Server2012中安装MySQL 2.1、MySQL简介 2.2、MySQL5.7安装与8.0 2.3、输入命令步骤 三、Navicat 3.1、简介 3.2、安装N…

揭示AUTOSAR中隐藏的漏洞

AUTOSAR是一个普遍采用的软件框架&#xff0c;用于各种汽车零部件&#xff0c;如ABS, ECU,自动照明、环境控制、充电控制器、信息娱乐系统等。AUTOSAR的创建目的是促进汽车零部件之间形成标准接口&#xff0c;可以在不同制造商之间互通。 因此&#xff0c;任何配备微控制器(MC…

WSL 与真实 linux 环境区别有多大?

随着 Windows 系统的不断发展和完善&#xff0c;WSL&#xff08;Windows Subsystem for Linux&#xff09;作为 Windows 10 的一个功能&#xff0c;为 Windows 用户提供了一个可以在 Windows 环境下运行 Linux 二进制可执行文件的环境。然而&#xff0c;尽管 WSL 为用户提供了一…

在线H5网页版植物大战僵尸游戏源代码

源码介绍 HTML5植物大战僵尸网页版游戏源码&#xff0c;直接把源码上传到服务器就能使用和访问

个人简历范本(精选5篇)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 个人求职简历第 1 篇 男 22 本科 AI简历 市场营…

模块电源(七):LDO 应用

1、Typical application circuit LDO 典型应用电路如下图所示&#xff1a; 2、High Output Current Positive Voltage Regulator 通过 PNP 型三极管 Tr1 &#xff0c;可以提高 LDO 的输出电流能力&#xff0c;电路如下图所示&#xff1a; 设流过 R1 的电流为 &#xff0c;当 …

Python基础知识:整理2 列表的相关操作

1. 查找某元素在列表中的下标索引 2. 在具体的位置插入一个元素 3. 在列表的尾部追加元素 4. 追加元素方式2 5. 删除元素 6. 删除元素方式2 7. 删除元素方式3 8. 清空列表 9. 统计某个元素在列表中出现的次数 10. 统计列表中所有元素的数量 11. 定义空列表

odoo模型钩子函数,启动odoo执行自定义代码

在odoo的models模型基类中定义了这样一个方法_register_hook, 从方法的备注(表单注册以后执行的代码)可以看出这个方法的作用, 所以当我们想在odoo启动以后执行一些代码 比如队列监听等等事情的时候,就可以利用这个方法执行我们的代码 示例: class ModelName(models.Model):…

【Linux系统】系统目录结构

参考资料&#xff1a; Linux 常用操作命令大全&#xff08;最后更新时间&#xff1a;2022年1月&#xff09;_linux常用命令-CSDN博客 Linux 系统目录结构 | 菜鸟教程 (runoob.com) 一、终端回显含义 登录Linux系统后&#xff0c;在终端输入命令&#xff1a;ls 可以得到如…

【REST2SQL】02 GO连接Oracle数据库

Oracle数据库我用的最多&#xff0c;先研究Oracle,Go连接Oracle并实现REST和SQL服务。 1 Oracle数据库的安装 我这里安装使用的是Oracle 11g , 安装过程省略5217字。 2 安装Go-ora依赖 go get github.com/sijms/go-ora/v2 安装成功后在GOPATH目录可见&#xff1a; 3 创建一…

2024年【浙江省安全员-C证】模拟考试及浙江省安全员-C证证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 浙江省安全员-C证模拟考试是安全生产模拟考试一点通生成的&#xff0c;浙江省安全员-C证证模拟考试题库是根据浙江省安全员-C证最新版教材汇编出浙江省安全员-C证仿真模拟考试。2024年【浙江省安全员-C证】模拟考试及…

CDGA,CDGP,CDMP有啥区别?考哪个好?

&#x1f3af;CDMP数据管理专业认证是由DAMA国际于2004推出&#xff0c;是一项涵盖学历教育、工作经验和专业知识考试在内的综合资格认证&#xff0c;也是目前全球为一数据管理方面权威性认证。 ✅CDGA&#xff1a;数据治理工程师&#xff0c;“DAMA中国”组织的数据治理方面的…

企业生产安全指南,请点击文章查收!

随着科技的不断发展&#xff0c;视频监控系统在各个领域中扮演着越来越重要的角色。视频监控系统为企业和机构提供了强大的工具&#xff0c;以提高效率、增强安全性&#xff0c;并为决策制定提供实时数据支持。 客户案例 企业安全与生产管理 在现代企业环境中&#xff0c;保障…

一、初识Redis与分布式系统

目录 一、Redis应用 二、实现方式 三、Redis应用 四、分布式系统 五、分布式系统实现 1、应用服务和数据库服务分离 2、引入负载均衡&#xff0c;应用服务器集群&#xff08;解决高并发&#xff09; 3、引入读写分离&#xff0c;数据库主从结构&#xff08;解决高并发&a…

mysql导入千万级别数据

背景介绍 导入大量数据可能是为了进行测试、分析或生产环境数据迁移等目的。在实际应用中&#xff0c;高效地导入数据至关重要&#xff0c;因为传统的逐行插入可能会花费大量时间。 问题描述 导入大量数据时&#xff0c;常见的问题包括导入速度慢、耗时长&#xff0c;甚至导致…

《动手学深度学习》学习笔记 第7章 现代卷积神经网络

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知识&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…

计算机组成原理-总线的性能指标

文章目录 总览总线周期 总线时钟周期 总线工作频率 总线时钟频率总线宽度 总线带宽例题串行总线和并行总线的速度&#xff08;带宽&#xff09;比较总线复用 信号线数总结 总览 总线周期 总线时钟周期 总线工作频率 总线时钟频率 一个总线周期就是指利用总线传输一组数据需要的…