Javascript 获取HTML预标记中鼠标悬停字符的坐标

Javascript 获取HTML预标记中鼠标悬停字符的坐标,javascript,html,css,Javascript,Html,Css,我想做一个HTML //可能会使用css来设计屏幕样式 屏风{ // ? } ................ ................ ................ ................ 一些 ................ 随机的 ................ ................ 所容纳之物 ................ 在这里 ................ ..........123... ................ .......

我想做一个HTML //可能会使用css来设计屏幕样式 屏风{ // ? } ................ ................ ................ ................ 一些 ................ 随机的 ................ ................ 所容纳之物 ................ 在这里 ................ ..........123... ................ ................
与其试图找出鼠标在pre元素中悬停的字母,只需让每个字母告诉您它是否被悬停

文本在DOM中呈现为字符串。我们需要做的是:

将文本转换为字符数组。 将每个字符转换为一个元素 用元素替换原始文本 对每个元素应用pointermove事件 功能屏幕TextGridScreen{ //辅助函数 //创建具有其他特性的跨度 函数TextElementpartial{ return Object.assigndocument.createElementspan,部分; } //将对象数组转换为跨元素 函数rowsToElementsrow{ 返回row.mapTextElement; } //应用网格闭包 函数Gridfn{ this.grid={行:0,列:0}; 返回fn.bindthis; } //使用栅格闭合创建具有栅格特性的对象阵列 函数text和坐标acc、txt、ind{ 返回\n==txt | |!ind? grid.row++,grid.column=0,acc.pushind?[]:[{textContent:txt,row:grid.row,column:grid.column++],acc : acc[acc.length-1]。推送{textContent:txt,行:grid.row,列:grid.column++},acc; } //清除屏幕 //附加文本元素 //将事件处理程序应用于每个元素 功能应用程序屏幕、元素、悬停{ screen.innerHTML=; elements.forEachfunction行、列{ 如果列>0 screen.appendChilddocument.createElementbr; row.forEachfunction元素{ screen.appendChildelement.addEventListenerpointermove,onHover | |函数{}; }; }; } //悬停事件侦听器 函数handleTextHoverevent{ var my=event.currentTarget; var x=my.column, y=我的行, char=my.textContent; console.logx:+x,y:+y,字符:+char; } //设置 var screenText=screen.textContent, screenArray=Array.fromscreenText, screenGrid=screenArray.reduceGridTextAndCoordinates,[], screenElements=screenGrid.maprowsToElements; //工作 applyscreen、screenElements、handleTextHover; } ScreenTextGriddocument.getElementByIdscreen; //可能会使用css来设计屏幕样式 屏风{ // ? } ................ ................ ................ ................ 一些 ................ 随机的 ................ ................ 所容纳之物 ................ 在这里 ................ ..........123... ................ ................
这可能正是我所需要的——我一定要试一试。如果网格填满了我的整个屏幕,你能推测我在悬停时是否会期望额外的CPU利用率吗?我想没有,但也许你有更好的洞察力。问,因为在最初的方法中,计算是一个简单的除法。@GeorgiGerganov我能想到的唯一优化方法是在pre元素上使用事件委托。当项目悬停时,它根本不计算任何内容。所有的工作都是在初始设置中完成的,这些信息保存在DOM节点上。然后,当您将元素悬停在该节点上时,它除了分别读取datacolumn和row/x和y之外什么都不做。再次感谢您提出的解决方案。我最终使用了另一种解决方案,因为它对我来说更容易实现:在中,我创建了一个具有单个字符的元素,并使用getBoundingClientRect获取其精确的维度。不管怎样,你的方法完全有道理,我接受了。