अब GitHub पर: https://github.com/patrickmarabeas/jQuery-FontSpy.js
अनिवार्य रूप से विधि दो अलग-अलग फोंट में एक स्ट्रिंग की चौड़ाई की तुलना करके काम करती है। हम कॉमिक सैंस का उपयोग फॉन्ट के खिलाफ परीक्षण के लिए कर रहे हैं, क्योंकि यह वेब सेफ़ फोंट का सबसे अलग है और आपके द्वारा उपयोग किए जा रहे किसी भी कस्टम फॉन्ट के लिए पर्याप्त रूप से अलग है। इसके अतिरिक्त, हम एक बहुत बड़े फ़ॉन्ट-आकार का उपयोग कर रहे हैं ताकि छोटे अंतर भी स्पष्ट हों। जब कॉमिक सैंस स्ट्रिंग की चौड़ाई की गणना की गई है, तो कॉमिक सैंस में वापसी के साथ, फ़ॉन्ट-परिवार को आपके कस्टम फ़ॉन्ट में बदल दिया जाता है। जब जाँच की जाती है, यदि स्ट्रिंग तत्व की चौड़ाई समान है, तो कॉमिक सैंस का फ़ॉलबैक फ़ॉन्ट अभी भी उपयोग में है। यदि नहीं, तो आपका फ़ॉन्ट चालू होना चाहिए।
मैंने फॉन्ट लोड डिटेक्शन की विधि को एक jQuery प्लगइन में डिज़ाइन किया है जो डेवलपर को स्टाइल तत्वों की क्षमता देने के लिए डिज़ाइन किया गया है कि क्या फ़ॉन्ट लोड किया गया है या नहीं। यदि कोई कस्टम फ़ॉन्ट लोड करने में विफल रहता है, तो विफल सुरक्षित टाइमर जोड़ा गया है ताकि उपयोगकर्ता बिना सामग्री के न रह सके। यह सिर्फ खराब प्रयोज्यता है।
मैंने फ़ॉन्ट लोडिंग के दौरान और कक्षाओं को जोड़ने और हटाने के साथ विफल होने पर अधिक नियंत्रण भी जोड़ा है। अब आप फ़ॉन्ट के लिए जो चाहें कर सकते हैं। मैं केवल आपके फ़ॉल बैक फ़ॉन्ट को कस्टम के करीब लाने के लिए फ़ॉन्ट आकार, लाइन रिक्ति, आदि को संशोधित करने की सलाह दूंगा ताकि आपका लेआउट बरकरार रहे, और उपयोगकर्ताओं को एक अपेक्षित अनुभव मिले।
यहाँ एक डेमो है: http://patrickmarabeas.github.io/jQuery-FontSpy.js
निम्न को .js फ़ाइल में फेंक दें और उसे संदर्भ दें।
(function($) {
$.fontSpy = function( element, conf ) {
var $element = $(element);
var defaults = {
font: $element.css("font-family"),
onLoad: '',
onFail: '',
testFont: 'Comic Sans MS',
testString: 'QW@HhsXJ',
delay: 50,
timeOut: 2500
};
var config = $.extend( defaults, conf );
var tester = document.createElement('span');
tester.style.position = 'absolute';
tester.style.top = '-9999px';
tester.style.left = '-9999px';
tester.style.visibility = 'hidden';
tester.style.fontFamily = config.testFont;
tester.style.fontSize = '250px';
tester.innerHTML = config.testString;
document.body.appendChild(tester);
var fallbackFontWidth = tester.offsetWidth;
tester.style.fontFamily = config.font + ',' + config.testFont;
function checkFont() {
var loadedFontWidth = tester.offsetWidth;
if (fallbackFontWidth === loadedFontWidth){
if(config.timeOut < 0) {
$element.removeClass(config.onLoad);
$element.addClass(config.onFail);
console.log('failure');
}
else {
$element.addClass(config.onLoad);
setTimeout(checkFont, config.delay);
config.timeOut = config.timeOut - config.delay;
}
}
else {
$element.removeClass(config.onLoad);
}
}
checkFont();
};
$.fn.fontSpy = function(config) {
return this.each(function() {
if (undefined == $(this).data('fontSpy')) {
var plugin = new $.fontSpy(this, config);
$(this).data('fontSpy', plugin);
}
});
};
})(jQuery);
इसे अपने प्रोजेक्ट पर लागू करें
.bannerTextChecked {
font-family: "Lobster";
}
$(document).ready(function() {
$('.bannerTextChecked').fontSpy({
onLoad: 'hideMe',
onFail: 'fontFail anotherClass'
});
});
उस FOUC को हटाओ!
.hideMe {
visibility: hidden !important;
}
.fontFail {
visibility: visible !important;
}
संपादित करें: FontAwesome संगतता को हटा दिया गया क्योंकि यह ठीक से काम नहीं करता था और विभिन्न संस्करणों के साथ मुद्दों में भाग गया था। हैकी फिक्स यहां पाया जा सकता है: https://github.com/patrickmarabeas/jQuery-FontFaceSpy.js/issues/1