ctx.font = ctx.font.replace(/\d+px/, "10px"); console.log(ctx.font); ctx.save(); ctx.font = ctx.font.replace(/\d+px/, "18px"); ctx.restore(); console.log(ctx.font); |
输出:
10px sans-serif
18px sans-serif
根据文档预期结果为:
10px sans-serif
10px sans-serif
根据文档save应当保存当前的上下文的字体,在测试过程中发现font不能保存
是否可以在save的相关文档补充一下哪些属性需要自己保存。
更新:
调用 restore 后,
fillText会使用 restore后 的字体信息,
font getter 会返回 restore前 的字体信息,
measureText 返回的宽度是使用 restore前的字体信息计算的。
是有问题,这样操作的需求场景是?
这个问题可以规避
本来想画:
结果画出来是
牵引线线和文字没有对齐
之前我的代码大概是:
this
.dataset =
this
._build_dataset(
this
.option);
const groups = []
for
(let item of
this
.dataset) {
let g =
this
._create_arc(item);
this
.ctx.save();
g.layout();
this
.ctx.restore();
groups.push(g);
}
this
._ajust_text_boxs(groups);
......
g的一些方法:
class valueArc extends ArcGroup {
_change_font_if_highlight() {
if
(!
this
.highlight) {
return
;
}
this
.ctx.font =
this
.ctx.font.replace(/\d+px/,
"16px"
);
}
layout() {
this
._change_font_if_highlight();
super
.layout();
\\
this.text_box = CalctextRect(this.ctx, this.label);这个方法用到了measureText}
.....
现在把 _change_font_if_highlight 改成了 _reset_label_font 每次重新设置 font 已经解决了
好像只是 ctx.font 在restore的时候值没有改回去,但实际效果是restore回去了。。