最近弄数据库弄得头大,想着没事整理一下画布canvas吧,毕竟canvas用途广泛,是html游戏开发必不可少的一环,也是h5新特性中的重中之重

首先canvas是一个html标签,可以给他设置一些css的样式,它默认是黑色的,宽为300px,高为150px的一个区域,他的坐标为(0,0),也就是浏览器的左上方,为了方便观察效果,我习惯将背景设置为黑色,canvas为白色,我觉得还挺美的,不对,劳资的最漂亮0.0...

再设置一下宽高吧,对于我这种强迫症来说,默认比例实在恶心,在设置的时候注意一点,最好设置行内样式,如果在外部样式中设置宽高的话,里面的填充方块也会等比例进行缩放,而不是默认的1:1。反正,你听我的就对了,那我就把它设置为400*400吧,效果是这个样子滴:

我给canvas一个id,方便我进行dom操作

<canvas id="c1" width="400px" height="400px">
<-----浏览器不支持canvas的时候会显示span里面的内容------>
<span>不支持canvas的浏览器</span>
</canvas>

  

好了,我要进行js操作了,你且看好了

1.绘制环境

getContext("2d"),这个命令是对canvas进行操作比不可少的一步,为2的绘制环境,那么有没有3d呢,有,但不是在里面写3d,而是这样写getContext("webgl")

var oC = document.getElementById("c1");

var oGC = oC.getContext("2d");//webgl:3D绘图

2.绘制方块

我们以简单的方块为例,canvas为我们提供了两种绘制方块的方法

*1.fillRect(L,T,W,H):填充,默认颜色是黑色.
*2.strokeRect(L,T,W,H):边框,边框默认为1px,黑色
 oGC.fillRect(50,50,50,50);
oGC.strokeRect(50,50,50,50);

 

3.设置绘图

必须要放在绘制方块的上面才有效果,不对,是放在绘制环境的前面

*1.fillStyle:填充颜色
*2.lineWhite:线宽度
*3.strokeStyle:边框颜色
oGC.fillStyle = "red";
oGC.lineWidth = 10;
oGC.strokeStyle = "yellow";

  这个时候,结合上面的代码,一起出来的效果如下:

还好还好,不是太丑,继续

4.绘制路径

*1.beginPath:绘制开始,类似于作用域,要实现绘制路径必须要有这一方法
*2.clothPath:绘制结束(起点和重点进行连接,形成闭合)
*3.moveTo:移动到绘制的新目标点(X,Y),即开始坐标点
*4.lineTo:新目标点(X,Y),即结束坐标点
oGC.beginPath();
oGC.moveTo(50,50);
oGC.lineTo(100,100);
oGC.lineTo(50,100);
oGC.closePath();

  但是仅仅是这些,页面是一片空白的,因为我们并没有对它进行填充或者是描线操作

5.描线或填充

*1.stroke:画线,默认黑色
*2.fill:填充,默认黑色
*3.rect:矩形区域(X,Y,width,height)
*4.cleanRect:删除一个画布的矩形区域(X,Y,width,height)
*5.save:保存路径,开始封闭,类似于局部变量
*6.restore:恢复路径,结束封闭 我想绘制一个红色的三角形,这个时候记住一定要用到save和restore,这样才能实现闭合的效果
 oGC.save();
oGC.fillStyle = "red";
oGC.beginPath();
oGC.moveTo(250,50);
oGC.lineTo(300,100);
oGC.lineTo(250,100);
oGC.closePath();
oGC.fill();
oGC.restore()

  

6.边界绘制

*1.lineJoin:边界连接点样式:miter(默认),round(圆角),bevel(斜角)
*2.lineCap:端点样式:即线条的样式,butt(默认),round(圆角),square(高度多出为宽度一般的值)
   oGC.lineJoin = "round";
oGC.moveTo(10,10);
oGC.lineTo(30,30);
oGC.lineWidth = 10;
oGC.stroke(); oGC.lineCap = "round";
oGC.fillRect(50,50,50,50);
oGC.strokeRect(50,50,50,50);

  效果如下:

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. spring通过配置xml文件集成quartz定时器

    概述 Spring为创建Quartzde Scheduler.Trigger和JobDetail提供了方便的FactoryBean类,以便能够在Spring容器中享受注入的好处. 此外,Spring还 ...

  2. python学习笔记(19)--PTVS的安装

    说明: 1. 折腾了两天eclipse,pydev,好不容易都弄好了,发现不会建工程,建完工程打不开,老是提示工作空间里有隐藏文件什么的,网上查了说是把.project里面的name标签的名字改了就行 ...

  3. matlab与MFC

    混合编程其实不难,关键是没有一个规范的,真正可以解决设置过程中出现的小问题的方法.我在设置的过程中,遇到了不少问题,花了多半天的时间,终于解决了,顺利地在vc中调用matlab 生成的dll文件中的函 ...

  4. matlab与VC6.0混合编程设置

    版本matlab 2009 和vc++6.0 SP6 步骤 1)  配置环境,新建一个VC工程,然后在VC界面的“工具->选项”的目录选项卡中的“include”中加入如下路径: 2)  D:\ ...

  5. PHP empty(),isset()与is_null()的实例测试

    测试的类型如下: <?php $a; $b = false; $c = ''; $d = ; $e = null; $f = array(); ?>   empty() 首先是empty的 ...

  6. 【C#/WPF】键盘事件

    需求:按下回车键,触发事件. 搜MSDN时,看到的键盘事件是System.Windows.Forms里的,在WPF中没法用: https://msdn.microsoft.com/zh-tw/libr ...

  7. 关于shm_open和shm_unlink的使用问题(要连接库的原因)

    关于shm_open和shm_unlink的使用问题 referencefunctionobjectsystembehaviorlinux C programming in the UNIX envi ...

  8. Postgres数据库备份与还原命令

    备份 pg_dump.exe -c -b -E UTF8 -U postgres -h 127.0.0.1 -p 5432 -f "f:\testdb001.bak" testdb ...

  9. libmysqlclient16 libmysqlclient-dev

    如果提示安装 libmysqlclient16 则用 libmysqlclient-dev 代替之

  10. js学习笔记16----父节点的操作

    1.元素.parentNode : 只读属性,获取当前元素的父节点. 2.元素.offsetParent : 只读属性,获取离当前元素最近的一个有定位属性(position为relative或者abs ...