我有一个 javascript 小书签,我把它放在一起使一项艰巨的任务变得更容易忍受。基本上,我正在浏览数百页的培训材料,并确保所有这些材料都已正确地从 Helvetica 交换到 Arial。小书签代码如下,但快速分解是它创建了一个 mousemove 事件侦听器和一个小的、绝对定位的 div。在 mousemove 事件中,div 移动到新的鼠标位置(向下和向右偏移 10px),使用 elementFromPoint 获取鼠标下的元素并显示该元素的 font-family 属性。哦,它会根据 Arial 是否出现在属性中来改变它的背景颜色。
var bodyEl=document.getElementsByTagName("body")[0];
var displayDiv=document.createElement("div");
displayDiv.style.position="absolute";
displayDiv.style.top="0px";
displayDiv.style.top="0px";
bodyEl.appendChild(displayDiv);
function getStyle(el,styleProp) {
var camelize = function (str) {
return str.replace(/\-(\w)/g, function(str, letter){
return letter.toUpperCase();
});
};
if (el.currentStyle) {
return el.currentStyle[camelize(styleProp)];
} else if (document.defaultView && document.defaultView.getComputedStyle) {
return document.defaultView.getComputedStyle(el,null)
.getPropertyValue(styleProp);
} else {
return el.style[camelize(styleProp)];
}
}
function getTheElement(x,y) {return document.elementFromPoint(x,y);}
fn_displayFont=function displayFont(e) {
e = e || window.event;
var divX=e.pageX+10;
var divY=e.pageY+10;
var font=getStyle(getTheElement(e.pageX,e.pageY),"font-family");
if (font.toLowerCase().indexOf("arial") != -1) {
displayDiv.style.backgroundColor = "green";
} else {
displayDiv.style.backgroundColor = "red";
}
displayDiv.style.top= divY.toString() + "px";
displayDiv.style.left= divX.toString() + "px";
displayDiv.style.fontFamily=font;
displayDiv.innerHTML=font;
}
window.addEventListener('mousemove', fn_displayFont);
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.keyCode == 27) {
window.removeEventListener('mousemove', fn_displayFont);
bodyEl.removeChild(displayDiv);
}
};
(作为记录,我从 SO 上的答案中窃取了样式确定代码,但不久之后我丢失了标签。谢谢,匿名的互联网人!)所以这一切都很好 - 直到我尝试将鼠标悬停在部分从顶部向下滚动的页面。如果我在滚动到页面顶部时将鼠标放在屏幕的最底部,并且如果我向下滚动足够远,则 div 将位于该位置,并且如果我向下滚动足够远,则萤火虫开始记录 e.pageX 未定义。
有任何想法吗?