一、什么是Canvas?

HTML5的canvas元素使用JavaScript在网页上绘制图像;

画布是一个矩形区域,可以控制其每一像素;

canvas拥有多种绘制路径,矩形,圆形,字符以及添加图像的方法

canvas的应用---主要是数据可视化

二、canvas的基础绘制体验

  • 创建canvas元素

在HTML5页面中添加canvas元素,规定元素的id,宽度和高度(默认宽高300*150):

<canvas width="600" height="400" ></canvas>
  • canvas坐标系

  • 通过JavaScript绘制
// 获取元素
var myCanvas=document.querySelector("canvas");
//获取绘图工具
var ctx=myCanvas.getContext("2d");
//设置绘图的起始位置
ctx.moveTo(x0,y0);
//设置绘图的路径
ctx.lineTo(endX,endY);
//描边
ctx.stroke();

三、canvas的基本使用

  • 图形的绘制

1-描边 stroke();

    /*画平行线*/
ctx.moveTo(100,100.5);
ctx.lineTo(300,100.5); ctx.moveTo(100,200);
ctx.lineTo(300,200); /*描边*/
ctx.stroke();

注意点:

1、线的问题

线条的默认宽度是1px,默认颜色为黑色

导致产生的问题:

对齐的点是线的中心位置  会把线分成两个0.5px 显示的是会不饱和增加宽度

解决方案:
前后移动0.5px

2-填充 fill();  

    /*1.绘制一个三角形*/
ctx.moveTo(100,100);
ctx.lineTo(200,100);
ctx.lineTo(200,200);
/*起始点和lineTo的结束点无法完全闭合缺角*/
/*使用canvas的自动闭合 */
//ctx.lineTo(100,100);
/*关闭路径*/
ctx.closePath();
//ctx.fill();

注意点:手动闭合:起始点和lineTo的结束点无法完全闭合缺角

使用canvas的自动闭合---ctx.closePath();

开启新的路径:cyx.beginPath();--需要绘制不同样式的路径时开启新路径,避免造成覆盖样式

填充规则:非零环绕--从你需要判断的填充区域拉一根线出去,和这根线会有若干条线与之相交,去看和它相交的轨迹;如果是顺时针相交加1,逆时针相交减1;将判断得出的数加起来,如果等于0则这个区域不填充,不等于0则填充。

  • 设置样式

画笔的状态:

lineWidth      线宽,默认1px;

lineCap         线末端类型:(butt默认)、round(圆头端)、square(平头端)

lineJoin         相交线的拐点: (miter 默认-尖头)、round(圆端)、bevel(平端)

strokeStyle    线的颜色

fillStyle         填充的颜色

setLineDash()    设置虚线 --参数为一个数组(数组是用来描述你的排列方式的)

getLineDash()    获取虚线宽度集合(获取虚线的排列方式 获取的是不重复的那一段的排列方式)

lineDashOffset  设置虚线的偏移量(负值向右偏移)

/*画线*/
ctx.moveTo(100,100.5);
ctx.lineTo(300,100.5);
/*[5,10] 数组是用来描述你的排列方式的*/
ctx.setLineDash([4,10,20]);
/*获取虚线的排列方式 获取的是不重复的那一段的排列方式*/
// console.log(ctx.getLineDash());
/*如果是正的值 往后偏移*/
/*如果是负的值 往前偏移*/
// ctx.lineDashOffset = -20;
ctx.stroke();

canvas--总结一的更多相关文章

  1. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  2. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  3. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  4. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  5. Canvas坐标系转换

    默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...

  6. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  7. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

  8. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  9. 使用 JavaScript 和 canvas 做精确的像素碰撞检测

    原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...

  10. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

随机推荐

  1. 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Create创建操作

    ☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Create消息交互流程 Nchf_OfflineOnlyCharging_Create服务化操作请求是 ...

  2. PyQt(Python+Qt)学习随笔:QAbstractItemView的tabKeyNavigation属性

    老猿Python博文目录 老猿Python博客地址 tabKeyNavigation属性为bool类型,用于控制视图中是否启用tab键和backtab(shift+tab)进行数据项之间的导航切换. ...

  3. [GKCTF2020]cve版签到

    cve-2020-7066漏洞 利用get_header($url)函数漏洞%00对部分url截断 构造ssrf请求,用127.0.0.1网址访问目标主机内部资源 其实就是get_header()的C ...

  4. MySQL入门看这一篇就够了

    MySQL JavaEE:企业级Java开发 web阶段 分为1.前端(页面,展示数据库中的数据) 2.后台(连接点:链接数据库JDBC.Mybatis,链接前端(控制视图跳转,给前端传递数据)) 3 ...

  5. CSS基础-字体

    字体变化设置 改变字体颜色 color 改变字体大小 font-size 改变字体粗细 font-weight 改变字体样式 font-family 改变字间距 letter-spacing 改变字体 ...

  6. egg的基本使用

    一.脚手架(可以快速生成项目) 1.新建一个项目文件夹,使用如下命令: 2.npm  init  egg  --type=simple 3.npm i 它会根据package.json里记录的所需包进 ...

  7. mybatis逆向工程运行

    命令: mvn mybatis-generator:generate 项目结构: generatorConfig.xml内容示例 <?xml version="1.0" en ...

  8. CentOS7 扩容磁盘非根分区

    CentOS7扩展磁盘分区 ​ 因为业务所在分区空间不足,需要扩容.分配磁盘大小为1T但实际使用过程中发现仅使用了500G左右空间,本次计划在原有磁盘上扩容1T,加上之前500G空闲直接扩容1.5TB ...

  9. HBase删除数据

    hbase官方文档中描述了,hbase删除数据可以总结为下面三种(Java API有很多接口,可以总结下面的几种): 删除一个列的指定版本 删除一个列的所用版本 删除指定列族的所有列 hbase删除数 ...

  10. selenium IDE使用-1

    selenium 硒 Mercury汞,外国人喜欢取这化学的名字 一.selenium概述 1.selenium是开源免费的,针对web应用程序功能自动化测试的工作. 2.做功能自动化的原因:回归测试 ...