मेरे पास एक जावास्क्रिप्ट बुकमार्कमार्क है जो मैंने एक कठिन कार्य को थोड़ा और अधिक सहनशील बनाने के लिए एक साथ रखा है। अनिवार्य रूप से मैं प्रशिक्षण सामग्री के सैकड़ों पृष्ठों से गुजर रहा हूं और यह सुनिश्चित कर रहा हूं कि यह सब ठीक से हेल्वैटिका से एरियल में बदल दिया गया है। बुकमार्कलेट कोड नीचे है, लेकिन एक त्वरित टूटना यह है कि यह एक मूसोम घटना श्रोता और एक छोटा, बिल्कुल स्थित div बना देता है। Mousemove घटनाओं पर, div नई माउस स्थिति (10px नीचे और दाएं से ऑफसेट) पर चला जाता है, तत्व के साथ तत्व के साथ तत्व प्राप्त करता है FromPoint और उस तत्व के लिए फ़ॉन्ट-पारिवारिक संपत्ति दिखाता है। ओह और यह संपत्ति के भीतर एरियल दिखाई देता है या नहीं, इसके आधार पर यह पृष्ठभूमि का रंग बदलता है।elementFromPoint पृष्ठ को स्क्रॉल करने के बाद शून्य लौटाता है
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);
}
};
(रिकार्ड के लिए, मैं शैली एक जवाब इतने पर यहां से कोड निर्धारित करने चुरा लिया है, लेकिन मैं टैब खो लंबे समय के बाद नहीं धन्यवाद, अनाम इंटरनेट पुरुष।!) तो यह सब अच्छा काम करता है - मैं जब तक शीर्ष से नीचे स्क्रॉल किए गए पृष्ठ के एक भाग पर होवर करने का प्रयास करें। Div पृष्ठ पर सबसे ऊपर स्क्रॉल करते समय स्क्रीन के बहुत नीचे माउस था, और अगर मैं नीचे स्क्रॉल करता हूं तो लॉग इन शुरू होता है कि e.pageX अपरिभाषित है।
कोई विचार?
अरे क्लार्क, एक मूल और अलग समाधान में प्रयास करने के लिए बहुत बहुत धन्यवाद। दुर्भाग्यवश इस मामले में यह मेरे लिए काम नहीं करेगा। मैंने मूल रूप से यह देखने के लिए प्रत्येक नोड्स के माध्यम से लूपिंग माना था (jQuery के साथ नहीं, क्योंकि यह कुछ ऐसा है जो मैंने अभी तक बहुत कुछ नहीं सीखा है, लेकिन हे), लेकिन जब मैंने इसे कोडिंग करना शुरू किया, तो मुझे एहसास हुआ कि अपवादों की सूची " एरियल होना चाहिए "नियम किसी भी आउटपुट को लगभग बेकार करने वाला था, क्योंकि मुझे अभी भी जाना होगा और पता लगाना होगा कि प्रत्येक नोड अपवाद है या नहीं। Mousemove रास्ता मैं इसे सिर्फ शरीर पर साफ कर सकते हैं। –
यदि आप यह पता लगाने की कोशिश कर रहे हैं कि कौन से तत्व 'एरियल होना चाहिए' नियम का उल्लंघन किया जा रहा है, तो आप आम माता-पिता के लिए एरियल नोड्स की उस सूची को फ़िल्टर कर सकते हैं। मुझे अपना जवाब अपडेट करने दें। –
मैं उन तत्वों को खोजने की कोशिश कर रहा हूं जो एरियल नहीं हैं, लेकिन, पृष्ठ के बाईं ओर और ऊपर के चारों ओर बैठे सभी मेनू नियम के अपवाद हैं - एरियल में, उन्हें पढ़ने में कठिनाई होती है। इसी प्रकार ऐसे स्थान हैं जहां सामग्री के मध्य में एक div है और यह उद्धरण का प्रतिनिधित्व करता है - ये एरियल नहीं हैं। यहां 30 अलग-अलग परिस्थितियां हैं जहां कुछ एरियल नहीं होना चाहिए, लेकिन वे समान वर्ग/आईडी साझा नहीं करते हैं, इसलिए उन्हें प्रोग्रामिक रूप से निर्धारित करना मुश्किल होगा। दृश्यमान, हालांकि, यह कहना आसान है, यही कारण है कि माउस का उपयोग करना सबसे अच्छा तरीका जैसा प्रतीत होता है। –