html - 将文本向右对齐时,画布上的文本位置在阿拉伯语和英语之间是不同的
问题描述
我需要在 HTML5 画布上的精确位置绘制阿拉伯语和英语的文本字符串。
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
//Draw rextangle.
ctx.strokeStyle = "red";
ctx.rect(75,20,150,80);
//Text right align
ctx.font = "15px Arial";
ctx.textAlign = "right";
var x = 70 + 150 ; // the end of rectangle ( X + Rectangle Width )
ctx.fillText("text in english",x, 70);
ctx.fillText("النص باللغه العربيه",x, 90);
ctx.stroke();
<html>
<body>
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
</html>
当文本为英文时,它将从 x 开始,并且即使文本为 any long 也不会超过或小于它。但是,如果文本是阿拉伯语,它将不会从特定的 x 开始!并且每次文本都会移动到小于 x ,为什么它不像英语那样是静态的?尝试用阿拉伯语写长文本或短文本,看看会发生什么。 这个我在 JS Fiddle 中的代码 我需要解释来解决这个问题。
解决方案
您可以在画布中更改每个字符串的方向。
...
ctx.fillText("text in english",x, 70);
c.setAttribute('dir','rtl');
ctx.fillText("النص باللغه العربيه",x, 90);
...
推荐阅读
- javascript - 如何制作命令行节点应用程序循环?
- javascript - 只有当来自两个不同元素的两个事件被触发时,如何运行一个函数?
- linux - 尽管我有权限,但关于编辑只读文件的“警告”
- python - 饼图python的值而不是百分比
- vue.js - Vue中如何从$router获取数据
- ios - 关于iOS应用支付架构的一个问题
- python - 根据组的第一个日期将月份累积添加到日期列
- javascript - React Native 如何使轮播重定向到另一个页面并选择相应的 id
- kubernetes - 在没有 k8s 集群的计划期间使用 Terraform 数据资源 kubernetes_all_namespaces
- google-cloud-platform - Cloud Run 错误:内部系统错误。缺少必要的许可