mat*_*129 3 html javascript canvas bidi
我有一个<canvas>我想呈现从右到左的字符串(例如,在中间某处带有一些英语单词的希伯来语句子)。
对于整个画布,dir可以指定一个属性。所以,在我的例子中,我会使用<canvas dir="rtl />.
不幸的是,这个解决方案远未完成。我在同一个应用程序中有一些 LTR 句子(例如,只有英语,或者英语中间有一些希伯来语,但不是相反的)。
dir不使用两个或多个<canvas>es 的情况下指定每个字符串的基础?这是dir属性如何以这种方式canvas处理双向字符串的简单示例:
var text = '??? text ??????'
var rtlCanvas = document.getElementById('rtl-canvas')
var rtlCtx = rtlCanvas.getContext('2d')
rtlCtx.font = '24px Arial'
rtlCtx.fillText(text, 250, 50)
var ltrCanvas = document.getElementById('ltr-canvas')
var ltrCtx = ltrCanvas.getContext('2d')
ltrCtx.font = '24px Arial'
ltrCtx.fillText(text, 0, 50)Run Code Online (Sandbox Code Playgroud)
<div>
<p>Looking good with dir=rtl:</p>
<canvas id="rtl-canvas" dir="rtl" width=300 height=100/>
</div>
<div>
<p>With dir=ltr, first and last words are swapped</p>
<canvas id="ltr-canvas" dir="ltr" width=300 height=100/>
</div>Run Code Online (Sandbox Code Playgroud)
您可以通过dir根据需要以编程方式更改属性来控制每个字符串的方向:
var text = '??? text ??????'
var canvas = document.getElementById('canvas')
var ctx = canvas.getContext('2d')
ctx.font = '24px Arial'
ctx.fillText(text, 165, 50)
canvas.setAttribute('dir','ltr');
ctx.fillText(text, 0, 100)Run Code Online (Sandbox Code Playgroud)
<div>
<canvas id="canvas" dir="rtl" width=300 height=300/>
</div>Run Code Online (Sandbox Code Playgroud)