【问题标题】:Canvas Placement Issue画布放置问题
【发布时间】:2016-06-16 18:58:24
【问题描述】:

我有一个 500*250 (w*h) 的画布并将此代码应用于它;

var cvs = document.getElementById('Dugong');
var ctx = cvs.getContext('2d');
var cvsHeight = cvs.height; // 250
var cvsWidth = cvs.width; // 500

var loadUpFlappy = "Flappy";
var loadUpDugong = "Dugong";

ctx.fillStyle = "#ECA20F";
ctx.fillRect(5, (cvsHeight / 2) + 1, ctx.measureText(loadUpFlappy).width + 10, 2); // across, down, width, height
ctx.fillRect(cvsWidth - (ctx.measureText(loadUpDugong).width + 5), cvsHeight / 2 + 1, ctx.measureText(loadUpDugong).width + 10, 2);

ctx.fillStyle = "#DADFE1";
ctx.font = "40px Century Schoolbook";
ctx.fillText(loadUpFlappy, 10, cvsHeight / 2);
ctx.fillText(loadUpDugong, cvsWidth - (ctx.measureText(loadUpDugong).width + 10), cvsHeight / 2);

据我所知,这段代码应该输出;

  1. 一条#ECA20F 线,高度为2,距离画布边框5,在画布中间线下方1,宽度为@ 987654327@加10
  2. 另一条#ECA20F 线高度为2,距离 画布边框5,在画布中间线下方1,宽度为@ 987654333@加10

  1. #DADFE1 中的单词Flappy10 远离画布的 边框,位于画布的中间。
  2. 单词Dugong也在#DADFE1中,即10远离画布的边框,也在画布的中间。

我的问题是线条与文本不匹配(它们应该跨越文本的宽度加上两边的 5px)。相反,他们这样做;

很抱歉,如果这个问题有任何明显的答案,因为我是 javascript 和画布的“菜鸟”。

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    编辑:我认为不可能采用文本长度。所以我有点错了。


    没有简单的方法来放置线条,因为您不知道文本中的字体大小。您可以做的是将文本居中对齐 (ctx.textAlign = 'center') 并将其放置在将成为其中心的某个点上。然后根据文本长度和大小设置线宽。将线始终放在该点下方,并设置与该点相同的 X,用线宽除以 2 减去它。但在这种情况下,线宽并不准确,但它有助于较小的单词。

    【讨论】:

    • 您的评论让我意识到,如果我声明字体样式 before 测试宽度,而不是 after 它会起作用。幸运的是,它做到了!所以谢谢我猜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2011-08-07
    • 2023-03-15
    • 2013-09-11
    相关资源
    最近更新 更多