canvas基本
基本
- 支持ie 9+,firefox,opera,chrome,safari
html:
<canvas id="fir_canvas" width="400" height="400">
- Canvas API 使用了路径的表示法。但是,路径由一系列的方法调用来定义,比如调用 beginPath() 和 arc() 方法。一旦定义了路径,其他的方法,如 fill(),都是对此路径操作。绘图环境的各种属性,比如 fillStyle,说明了这些操作如何使用
方法
const canvas = document.getElementById('fir_canvas');
const ctx = canvas.getContent('2d');
- getContext(“2d”) 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
- dom
- clearRect(x,y,width,height) 清空给定矩形内的指定像素
绘制路径(线)和线形成的封闭图形
ctx.strokeStyle = “#0000ff”; // 线条的颜色
ctx.lineWidth = 8; // 线条的粗细
一条线
ctx.moveTo(100,100);
ctx.lineTo(500,500);
ctx.stroke(); // 绘制
一条拐弯的线(例子效果为一个折形)
ctx.moveTo(2, 2);
ctx.lineTo(16, 12);
ctx.lineTo(2, 24);
ctx.stroke();
效果:

例子二折形闭合成一个三角形
ctx.moveTo(20, 20);
ctx.lineTo(160, 120);
ctx.lineTo(20, 240);
ctx.lineTo(20, 20);
ctx.lineWidth = 8;
ctx.stroke();
路径回到起始点即可,但这样在设置线条粗细过粗的时候会有一些问题:

所以当绘制封闭图形时应该使用标准方法closePath(),见例五。
多条例子二
beginPath()beginPath()方法,就会对之前绘制的路径进行清空,但不会回到(0,0)原点。
// 共用的样式写在beginPath()外面
ctx.beginPath();
ctx.moveTo(2, 2);
ctx.lineTo(16, 12);
ctx.lineTo(2, 24);
ctx.lineTo(2, 2);
ctx.stroke(); ctx.beginPath();
ctx.moveTo(32, 2);
ctx.lineTo(46, 12);
ctx.lineTo(32, 24);
ctx.lineTo(32, 2);
ctx.stroke(); ctx.beginPath();
ctx.moveTo(62, 2);
ctx.lineTo(76, 12);
ctx.lineTo(62, 24);
ctx.lineTo(62, 2);
ctx.strok 大专栏 canvas基本eStyle = "#0000ff";
ctx.stroke();
效果

封闭图形标准写法
ctx.beginPath();
ctx.moveTo(62, 2);
ctx.lineTo(76, 12);
ctx.lineTo(62, 24);// 省略了最后回到原点那句
ctx.closePath();
ctx.stroke();
用beginPath()第一句可以用moveTo()也可以用lineTo()
不用beginPath()得用moveTo();
画矩形 正方形 (因为必须有宽高)
strokeRect(x, y, width, height)strokeRect() 方法绘制矩形(不填色)。笔触的默认颜色是黑色。
使用 strokeStyle 属性来设置笔触的颜色、渐变或模式
ctx.lineWidth = 8;
ctx.strokeStyle = "#333";
ctx.strokeRect(10,10,200,200);
效果

lineCap属性 定义线段开头和结尾的形状butt(默认值),round,square
效果(从上到下依次为butt round square)

round只对线条的开头和结尾处有效果,对线段之间的连接处没有作用
lineJoin属性miterLimit属性 线条与线条之间的连接方式lineJoin: miter(默认值,尖角) bevel(衔接) round(圆角)
当lineJoin属性值是miter时,miterLimit起作用,默认值为10。
填充 fill() fillStyle | fillRect()
先填充,再画边框
ctx.beginPath();
ctx.lineTo(100, 100);
ctx.lineTo(200, 100);
ctx.lineTo(200, 200);
ctx.lineTo(100, 200);
ctx.closePath();
ctx.lineWidth = 8;
ctx.fillStyle = "#ddd";
ctx.fill();
ctx.stroke();
效果

fillRect(x,y,width,height)
绘制“已填色”的矩形(因为必须有宽高)。默认的填充颜色是黑色。
使用 fillStyle 属性来设置用于填充绘图的颜色、渐变或模式。如果不设置fillStyle则使用默认的黑色。
在例六的基础上
ctx.lineWidth = 8;
ctx.strokeStyle = "#333";
ctx.fillStyle = "antiquewhite";
ctx.fillRect(10,10,200,200);
ctx.strokeRect(10,10,200,200);
效果

canvas基本的更多相关文章
- html5 canvas常用api总结(三)--图像变换API
canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- Canvas坐标系转换
默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- html5标签canvas函数drawImage使用方法
html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...
- 使用 JavaScript 和 canvas 做精确的像素碰撞检测
原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...
- H5项目开发分享——用Canvas合成文字
以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...
随机推荐
- linux中awk的应用
1.awk的基本认识和使用方法,参考下面链接 https://www.cnblogs.com/timxgb/p/4658631.html 2.awk中关于条件判断的用法,如 https://blog. ...
- feign声明式客户端
参考地址: https://blog.csdn.net/qq_30643885/article/details/85341275 Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得 ...
- 如何把Visual Studio完全安装在其他磁盘
//Visual Studio快把我c盘吃完了,就网上找了找解决方法,自己总结一下,方便理解 第一步 找到以下文件夹 C:\\Program Files (x86)\\Microsoft SDKs C ...
- K 破忒头的匿名信(ac自动机+小dp)
题:https://ac.nowcoder.com/acm/contest/4010/K 题意:用一些模式串凑成一个目标串,每个模式串有消耗,问组合的最小消耗,或不能组成输出-1: 分析:典型的AC自 ...
- Kubernetes系列:故障排查之Pod状态为CreateContainerError
查看pod状态如下图所示,当前状态为CreateContainerError. 通过kube describe命令去查看Pod的状态发现没有提示任何错误.但是当通过命令kube logs查看pod的日 ...
- ThreadPoolExecutor自定义线程池
1.ThreadPoolExecutor创建线程池的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...
- Pipe Fitter and the Fierce Dogs
Pipe Fitter and the Fierce Dogs [JAG Asia 2016] 理解题意之后,就是一个非常傻的DP 然后难在理解题意,理解非法状态 #include <bits/ ...
- script和scriptreplay_超骚气的实时监控你的服务器
今天看到一个超级叼的linux命令,可以完整记录屏幕上的命令与输出结果. 有人问这有什么叼的,不就是保存历史操作记录吗?我看看日志也能看出来. 不不不,我要说的“完整记录”包括第几秒执行什么命令,就像 ...
- 2019-2020-1 20199324《Linux内核原理与分析》第五周作业
第四章 系统调用的三层机制(上) 知识点总结: 系统调用:系统调用是操作系统为用户态进程与硬件设备进行交互提供的一组接口. 系统调用的功能特性: 把用户从底层的硬件编程中解放出来: 极大地提高了系统的 ...
- EMD——EEMD——CEEMD语音增强算法基础
首先,HHT中用到的EMD详细介绍:https://wenku.baidu.com/view/3bba7029b4daa58da0114a9a.html 本文具体参考 https://zhuanlan ...