html5选择状态,HTML5 Canvas 状态

HTML5 Canvas 状态

我们在canvas上绘制图形的时候,经常需要通过save()和restore()改变2D上下文的状态。举例来说,你在绘制直线或矩形的时候需要一种strokStyle,在绘制下一条直线或矩形的时候需要另一种strokStyle。又或者是不同的填充色,旋转角度等

当使用其2D上下文在HTML5画布上进行绘制时,该2D上下文处于某种状态。您可以通过操纵2D上下文属性(例如fillStyle 和)来设置该状态strokeStyle。所有这些操作总共称为2D上下文state。

通常,在画布上绘制时,您需要在绘制过程中更改2D上下文的状态。例如,strokStyle对于一条直线或矩形,可能需要一个,而strokeStyle对于其他直线或矩形,则可能需要另一个 。或其他轮换,或其他。

由于在绘制每个形状之前设置完整状态非常麻烦,因此可以将状态推送到状态堆栈上。然后可以从此状态堆栈中弹出较早的状态。这是在临时状态更改后恢复较早状态的快速方法.

HTML5 Canvas画布状态示例

绘图状态进行压栈和出栈的方法如下:context.save();     // 将一个状态压入状态栈中.

context.restore();  // 将最前面的状态出栈,并设置到2d上下文中.

被保存在堆栈中后,您可以将多个状态推送到该堆栈上,然后将其弹出。这是一个代码示例:

示例HTML5 Canvas not supported

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

var context = canvas.getContext("2d");

context.fillStyle  ="#66ff66";

context.strokeStyle="#990000";

context.lineWidth  = 5;

context.fillRect  (5, 5, 50, 50);

context.strokeRect(5, 5, 50, 50);

context.save();

context.fillStyle = "#6666ff";

context.fillRect  (65, 5, 50, 50);

context.strokeRect(65, 5, 50, 50);

context.save();

context.strokeStyle = "#000099";

context.fillRect  (125, 5, 50, 50);

context.strokeRect(125, 5, 50, 50);

context.restore();

context.fillRect  (185, 5, 50, 50);

context.strokeRect(185, 5, 50, 50);

context.restore();

context.fillRect  (245, 5, 50, 50);

context.strokeRect(245, 5, 50, 50);

测试看看 ‹/›

这是在画布上绘制时上述代码的结果:HTML5 Canvas not supported

状态栈的用处

如果您更改画布合成模式或转换设置,并且需要在进行更改之前先返回到设置,则状态堆栈非常有用。通过保存和恢复构图模式或转换设置,可以确保正确重置了它。否则,要返回到之前的确切设置可能会有些困难。

2D上下文的状态有哪些?

所有2D上下文属性都是保存和还原状态的一部分。但是,在画布上绘制的却不是。这意味着,在还原状态时,您不会还原绘图区域本身。您仅还原2D上下文设置(属性值)。这些设置包括:fillStyle

font

globalAlpha

globalCompositionOperation

lineCap

lineJoin

lineWidth

miterLimit

shadowBlur

shadowColor

shadowOffsetX

shadowOffsetY

strokeStyle

strokeStyle

textAlign

textBaseline

The clipping region

The transformation matrix (通过context.rotate()+ 旋转+平移context.setTransform())

此列表并不详尽。随着标准的发展,更多的属性可能成为2D上下文状态的一部分.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值