Web 前端开发

Canvas基本篇

2017-03-09  本文已影响0人  落落izj

8###什么是 Canvas

canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提出的一个方案, 今天已经在大多数浏览器中实现.

canvas 英 ['kænvəs] 美 ['kænvəs] 帆布 画布

canvas 的基本用法

基本语法

使用 canvas 标签, 即可在页面中开辟一格区域. 可以设置其 width 和 height 设置该区域的尺寸.

默认 canvas 的宽高为 300 和 150.

不要使用 CSS 的方式设置宽高, 应该使用 HTML 属性.

如果浏览器不支持 canvas 标签, 那么就会将其解释为 div 标签. 因此常常在 canvas 中嵌入文本, 以提示用户浏览器的能力.

canvas 的兼容性非常强, 只要支持该标签的, 基本功能都一样, 因此不用考虑兼容性问题.

canvas 本身不能绘图. 是使用 JavaScript 来完成绘图. canvas 对象提供了各种绘图用的 api.

canvas 的使用领域

canvas 的使用领域很多:

游戏,可视化数据(重点),banner 广告,多媒体,未来

模拟仿真,远程操作,图形编辑

基本绘图

基本绘图方法

绘图步骤

计算机直角坐标系

右x正,下y正。

getContext 方法
      语法:Canvas.getContext( typeStr )
moveTo 方法
      语法:CanvasRenderingContext2D.moveTo( x, y )
lineTo 方法
  语法:CanvasRenderingContext2D.lineTo( x, y )
stroke 方法
      语法:CanvasRenderingContext2D.stroke()

描述: 该方法用于连线, 将描述的所有点按照指定顺序连接起来.

结论

1.绘图先要获得上下文, 即绘图工具

2.绘图需要设置开始的坐标

3.绘图是先描点, 然后一个一个依次连线

4.依次绘图只能绘制单一样式( 色彩等 )

直线图形

fill 方法

      语法: CanvasRenderingContext2D.fill()
非零环绕原则

闭合路径

closePath 方法
    语法: CanvasRenderingContext2D.closePath()

案例

...
ctx.moveTo( 100, 100 );
ctx.lineTo( 300, 100 );
ctx.lineTo( 300, 200 );
ctx.closePath();
ctx.stroke();

线型相关属性

设置描边与填充不一定只能使用黑色的细线. 可以利用一些属性设置其效果

    CanvasRenderingContext2D.lineWidth 设置线宽.
    CanvasRenderingContext2D.lineCap 设置线末端类型.
    CanvasRenderingContext2D.lineJoin 设置相交线的拐点.
    CanvasRenderingContext2D.getLineDash() 获得线段样式数组.
    CanvasRenderingContext2D.setLineDash() 设置线段样式.
    CanvasRenderingContext2D.lineDashOffset 绘制线段偏移量.

案例

...
ctx.moveTo( 100, 100 );
ctx.lineTo( 300, 100 );
ctx.stroke();

ctx.beginPath();
ctx.lineWidth = 10;
ctx.moveTo( 100, 250 );
ctx.lineTo( 300, 250 );
ctx.stroke();
设置线末端类型
  语法: CanvasRenderingContext2D.lineCap = value

案例

...
ctx.lineWidth = 10;
ctx.moveTo( 100, 100 );
ctx.lineTo( 300, 100 );
ctx.stroke();

ctx.beginPath();
ctx.lineCap =  'round';
ctx.moveTo( 100, 130 );
ctx.lineTo( 300, 130 );
ctx.stroke();

ctx.beginPath();
ctx.lineCap =  'square';
ctx.moveTo( 100, 160 );
ctx.lineTo( 300, 160 );
ctx.stroke();
设置相交线的拐点
  语法: CanvasRenderingContext2D.lineJoin = value

案例

...
ctx.lineWidth = 10;
ctx.lineJoin = 'round';
ctx.moveTo( 100, 100 );
ctx.lineTo( 200, 200 );
ctx.lineTo( 300, 100 );
ctx.stroke();

ctx.beginPath();
ctx.lineJoin = 'bevel';
ctx.moveTo( 100, 150 );
ctx.lineTo( 200, 250 );
ctx.lineTo( 300, 150 );
ctx.stroke();

ctx.beginPath();
ctx.lineJoin = 'miter';
ctx.moveTo( 100, 200 );
ctx.lineTo( 200, 300 );
ctx.lineTo( 300, 200 );
ctx.stroke();
虚线
...
CanvasRenderingContext2D.lineDashOffset = number
CanvasRenderingContext2D.getLineDash()
CanvasRenderingContext2D.setLineDash()

描述:

setLineDash 用于设置开始绘制虚线的偏移量. 数字的正负表示左右偏移.
getLineDash() 与 setLineDash() 方法使用数组描述实线与虚线的长度.
演示

...
ctx.moveTo( 100, 90 );
ctx.lineTo( 100, 110 );
ctx.moveTo( 300, 90 );
ctx.lineTo( 300, 110 );

ctx.moveTo( 100, 140 );
ctx.lineTo( 100, 160 );
ctx.moveTo( 300, 140 );
ctx.lineTo( 300, 160 );

ctx.moveTo( 100, 190 );
ctx.lineTo( 100, 210 );
ctx.moveTo( 300, 190 );
ctx.lineTo( 300, 210 );
ctx.stroke();

ctx.beginPath();
ctx.moveTo( 100, 100 );
ctx.lineTo( 300, 100 );
ctx.stroke();

ctx.beginPath();
ctx.setLineDash( [ 5, 5 ] );
ctx.moveTo( 100, 150 );
ctx.lineTo( 300, 150 );
ctx.stroke();

ctx.beginPath();
ctx.lineDashOffset = -2;
ctx.moveTo( 100, 200 );
ctx.lineTo( 300, 200 );
ctx.stroke();
填充与描边样式

**小伙伴们看完这些可以自己做一些小案例奥,比如网格了,坐标系了,还有折线图啊什么的,下次见奥!

喜欢请关注,小小程序猿 ,落落izj**

上一篇下一篇

猜你喜欢

热点阅读