HTML5 Canvas:调整大小时设置上下文
HTML5 Canvas: Setting context on resize
我有一个使用 HTML5 Canvas (createjs) 的项目,我遇到了文本笔划尖峰的问题,这意味着我必须设置 2d 上下文的斜接限制。但是,当 window 调整大小时,父级(我无法控制)缩放 canvas,这显然会重置 canvas 上下文。
现在,我想避免在客户端中放置 onresize 事件 - 我的第一个想法就是使用 createjs Ticker 这样:
createjs.Ticker.addEventListener("tick", handleTick);
function handleTick(event) {
var ctx = canvas.getContext('2d');
ctx.miterLimit = 2;
}
虽然这看起来有点浪费,但有没有更有效的方法来做到这一点,而不使用 DOM 个事件?
您的方法 可能 有效,但这绝对是一种 hack,因为您不能指望上下文属性会得到维护,或者它们不会被错误地应用地点。
如果您确实想要修补显示列表以更新上下文,您可以使用 "drawstart" 事件,该事件在绘制显示列表之前触发:
stage.on("drawstart", function(e) {
var ctx = stage.canvas.getContext("2d");
ctx.miterLimit = 2;
});
但是,如果您想要一种特定于实例的更好方法,您可以扩展文本 class 以附加您想要的任何上下文属性。这是一个简单的例子,其中 miterLimit
被存储并在任何时候绘制文本时应用。在此示例中,您可以创建多个实例并为其设置不同的斜接限制。请注意,您可能还想支持其他属性,例如 lineJoin。
http://jsfiddle.net/cr4hmgqp/2/
(function() {
"use strict"
function MiterText(text, font, color, miterLimit) {
this.Text_constructor(text,font,color);
this.miterLimit = miterLimit;
};
var p = createjs.extend(MiterText, createjs.Text);
p.draw = function(ctx, ignoreCache) {
ctx.miterLimit = this.miterLimit;
if (this.Text_draw(ctx, ignoreCache)) { return true; }
return true;
};
p.clone = function() {
return this._cloneProps(new MiterText(this.text, this.font, this.color, this.miterLimit));
};
createjs.MiterText = createjs.promote(MiterText, "Text");
}());
请注意,这个问题有望在下一版本的 EaselJS 中得到解决。这是跟踪的问题:https://github.com/CreateJS/EaselJS/issues/781
干杯。
我有一个使用 HTML5 Canvas (createjs) 的项目,我遇到了文本笔划尖峰的问题,这意味着我必须设置 2d 上下文的斜接限制。但是,当 window 调整大小时,父级(我无法控制)缩放 canvas,这显然会重置 canvas 上下文。
现在,我想避免在客户端中放置 onresize 事件 - 我的第一个想法就是使用 createjs Ticker 这样:
createjs.Ticker.addEventListener("tick", handleTick);
function handleTick(event) {
var ctx = canvas.getContext('2d');
ctx.miterLimit = 2;
}
虽然这看起来有点浪费,但有没有更有效的方法来做到这一点,而不使用 DOM 个事件?
您的方法 可能 有效,但这绝对是一种 hack,因为您不能指望上下文属性会得到维护,或者它们不会被错误地应用地点。
如果您确实想要修补显示列表以更新上下文,您可以使用 "drawstart" 事件,该事件在绘制显示列表之前触发:
stage.on("drawstart", function(e) {
var ctx = stage.canvas.getContext("2d");
ctx.miterLimit = 2;
});
但是,如果您想要一种特定于实例的更好方法,您可以扩展文本 class 以附加您想要的任何上下文属性。这是一个简单的例子,其中 miterLimit
被存储并在任何时候绘制文本时应用。在此示例中,您可以创建多个实例并为其设置不同的斜接限制。请注意,您可能还想支持其他属性,例如 lineJoin。
http://jsfiddle.net/cr4hmgqp/2/
(function() {
"use strict"
function MiterText(text, font, color, miterLimit) {
this.Text_constructor(text,font,color);
this.miterLimit = miterLimit;
};
var p = createjs.extend(MiterText, createjs.Text);
p.draw = function(ctx, ignoreCache) {
ctx.miterLimit = this.miterLimit;
if (this.Text_draw(ctx, ignoreCache)) { return true; }
return true;
};
p.clone = function() {
return this._cloneProps(new MiterText(this.text, this.font, this.color, this.miterLimit));
};
createjs.MiterText = createjs.promote(MiterText, "Text");
}());
请注意,这个问题有望在下一版本的 EaselJS 中得到解决。这是跟踪的问题:https://github.com/CreateJS/EaselJS/issues/781
干杯。