使用document.elementFromPoint
,您可以找到鼠标悬停在其上的元素。所有你需要的是一个事件处理程序,更新你的鼠标移动记录。
var pointer = {x: 0, y: 0};
window.addEventListener("mousemove",function(e) {
pointer.x = e.clientX;
pointer.y = e.clientY;
});
function getTextAtPointer() {
return document.elementFromPoint(pointer.x,pointer.y).textContent;
}
唯一的问题是,它不会告诉你你徘徊在什么字上。我能想到的唯一解决方案是解析文本内容并将每个单词包装在span
标记中,然后再次拨打document.elementFromPoint
以获取具体的span
。这样做听起来像一个沉重的负担,所以希望有一个更简单的方法来解决这个问题。
编辑
我决定尝试与span
标记替换每个单词的方法,当我测试了它,它似乎没有任何可感知的方式影响他们的表现,所以随时尝试一下吧。这里是更新的getTextAtPointer
函数。
function getTextAtPointer() {
var elem = document.elementFromPoint(pointer.x,pointer.y);
for(var i=elem.childNodes.length-1; i>=0; i--) {
var node = elem.childNodes[i];
if(node.nodeType==3) {
var words = node.textContent.split(/\s+/);
if(words.length>1) {
var frag = document.createDocumentFragment();
for(var j=0; j<words.length; j++) {
if(words[j].length>0) {
var span = document.createElement("span");
span.textContent = words[j];
frag.appendChild(span);
if(j!=words.length-1) {
frag.appendChild(document.createTextNode(" "));
}
}
}
elem.replaceChild(frag,node);
}
}
}
var word = document.elementFromPoint(pointer.x,pointer.y).textContent;
if(word.search(/\s+/)!=-1) {
return "";
}
return word;
}