gpt4 book ai didi

javascript - 通过 Kinetic.js 文本元素中的字符串索引获取单词/字符屏幕位置

转载 作者:太空宇宙 更新时间:2023-11-04 16:30:07 24 4
gpt4 key购买 nike

输入:

一些文本包含常规单词和特殊单词/用#分隔的字符。 Font 和 fontSize 是不变的,可以说没有任何样式的 Arial 14。例如:

Lorem ipsum dolor #sit# amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore #et# dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis #aute# irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur #sint# occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

输出:

当用户单击#someSeparatedWord# 时,我需要在控制台中记录该词(在我的示例中,用户可以单击“sit”、“et”、“aute”、“sint”,它只会记录这些词)。那么问题在于如何获取或计算这个字/字符 Canvas 坐标?

最佳答案

您的 # delmiters 无法识别单词,因为 context.fillText 在 Canvas 上绘制单词。

那些文字成为 Canvas 位图中无法识别的部分。

您需要做的是使用 context.measureText 映射每个单词的边界框。

enter image description here

然后您可以针对这些边界框测试单击的 mouseX/mouseY 位置。

这是示例代码和演示:http://jsfiddle.net/m1erickson/c9nQj/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
canvas{border:1px solid red;}
</style>
<script>
$(function(){

$results=$("#results");

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var $canvas=$("#canvas");
var canvasOffset=$canvas.offset();
var offsetX=canvasOffset.left;
var offsetY=canvasOffset.top;

var text="Lorem ipsum dolor #sit# amet, consectetur adipisicing elit";

var words=text.split(" ");
var wordsBB=new Array(words.length);

ctx.font="14px arial";

var length=ctx.measureText(words[0]).width;

wordsBB[0]={
x:0,
y:0,
width:length,
height:16
}

var accumLength=length;

for(var i=1;i<words.length;i++){
var length=ctx.measureText(" "+words[i]).width;
wordsBB[i]={
x:accumLength,
y:0,
width:length,
height:16
}
accumLength+=length;
}

ctx.fillText(text,0,15);
ctx.lineWidth=0.50;

for(var i=0;i<words.length;i++){
var bb=wordsBB[i];
ctx.strokeRect(bb.x,bb.y,bb.width,bb.height);
}


function handleMouseMove(e){
e.preventDefault();
var x=parseInt(e.clientX-offsetX);
var y=parseInt(e.clientY-offsetY);

$results.text("---");
for(var i=0;i<wordsBB.length;i++){
var bb=wordsBB[i];
if(x>bb.x && x<bb.x+bb.width && y>bb.y & y<bb.y+bb.height){
$results.text(words[i]);
}
}

}

$("#canvas").mousemove(function(e){handleMouseMove(e);});


}); // end $(function(){});
</script>
</head>
<body>
<p>Hover over a word.</p>
<h2 id="results">---</h2>
<canvas id="canvas" width=400 height=50></canvas>
</body>
</html>

此演示使用 html Canvas 。对于 kineticJS,您可以在离屏 Canvas 上进行这些边界框计算,然后在 Kinetic.Text 节点上使用这些边界框。

另请注意,您必须逐行计算边界框,因为第 1 行和第 2 行的框 y 坐标会有所不同,等等。

关于javascript - 通过 Kinetic.js 文本元素中的字符串索引获取单词/字符屏幕位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22552765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com