上标,使用unicode&;Javascript?
我想在HTML画布中显示带有指数的数字。由于context.fillText(…)不支持HTML标记,我想我应该尝试使用unicode。结果与我预期的不完全一样,因为数字1-3的行为方式与其他上标数字不同。我的代码如下:上标,使用unicode&;Javascript?,javascript,canvas,unicode,Javascript,Canvas,Unicode,我想在HTML画布中显示带有指数的数字。由于context.fillText(…)不支持HTML标记,我想我应该尝试使用unicode。结果与我预期的不完全一样,因为数字1-3的行为方式与其他上标数字不同。我的代码如下: // Only supports integers and will round any non-integers function superscriptNumber(intNumber) { var text = '';
// Only supports integers and will round any non-integers
function superscriptNumber(intNumber) {
var text = '';
var number = Math.round(intNumber);
var supers = '⁰¹²³⁴⁵⁶⁷⁸⁹'.split('');
if (intNumber === 0) {
text = supers[0] ;
} else {
while (Math.floor(number) > 0) {
digit = number % 10;
number = Math.floor(number / 10);
text = supers[digit] + text;
}
}
return text;
}
如果我这样做了
var text = '10 '+ superscriptNumber(1265);
ctx.fillText(text, x, y);
然后我看到1和2在同一个级别,6和5略加上标。我怀疑他可能是因为字体的原因,字体对它们的处理略有不同(1、2、3由于某种原因不在同一个unicode范围内)?是否有办法改进我的代码,以确保字体之间的一致性?是的,这似乎是字体/unicode支持的问题。你可以继续尝试使用特定的字体,但我想你只需要在不同的位置用较小的字体打印数字。我刚刚浏览了windows机器的所有标准web字体,结果不一致。有些字体只有1,2,3和其他字体的数字(在同一系列中相关),有些字体缺少其他数字,有些字体缺少大部分数字,但缺少一些,有些字体拥有所有上标数字。最好是自己编写fillText函数,自己编写上标。是的,这似乎是字体/unicode支持的问题。你可以继续尝试使用特定的字体,但我想你只需要在不同的位置用较小的字体打印数字。我刚刚浏览了windows机器的所有标准web字体,结果不一致。有些字体只有1,2,3和其他字体的数字(在同一系列中相关),有些字体缺少其他数字,有些字体缺少大部分数字,但缺少一些,有些字体拥有所有上标数字。最好的办法是编写自己的fillText函数,然后自己编写上标。