Тепер на GitHub: https://github.com/patrickmarabeas/jQuery-FontSpy.js
По суті, метод працює, порівнюючи ширину рядка у двох різних шрифтах. Ми використовуємо Comic Sans як шрифт для тестування, оскільки він є самим різним із веб-безпечних шрифтів і, сподіваємось, досить відрізняється від будь-якого спеціального шрифту, який ви будете використовувати. Крім того, ми використовуємо дуже великий розмір шрифту, тому будуть помітні навіть невеликі відмінності. Коли обчислюється ширина рядка Comic Sans, сімейство шрифтів змінюється на ваш власний шрифт із відхиленням до Comic Sans. Якщо встановлено прапорець, якщо ширина рядкового елемента однакова, запасний шрифт Comic Sans все ще використовується. Якщо ні, ваш шрифт повинен працювати.
Я переписав метод виявлення навантаження шрифтів у плагін 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;
}
EDIT: сумісність FontAwesome вилучено, оскільки вона не працювала належним чином і зіткнулася з проблемами в різних версіях. Швидке виправлення можна знайти тут: https://github.com/patrickmarabeas/jQuery-FontFaceSpy.js/issues/1