Внешний шрифт на холсте HTML5
Я совершенно не понимаю, как изменить шрифт, который я использую при рисовании текста на холсте. Ниже приведен шрифт, который я определил в своем CSS:
@font-face{
font-family:"Officina";
src:url(OfficinaSansStd-Book.otf);
}
Теперь в моем HTML/JavaScript я испытываю соблазн сказать:
context.font = '30px "Officina"';
Но это не работает. Он отлично работает, если я использую веб-доступный шрифт (например, Arial), а шрифт Officina отображается хорошо, когда я просто пишу простой текст прямо на веб-странице. Что мне не хватает?
Ответы
Ответ 1
Чтобы получить совместимость между браузерами, вы должны использовать CSS для встроенного шрифта следующим образом:
@font-face {
font-family: 'BankGothicMdBTMedium';
src: url('bankgthd-webfont.eot');
src: local('BankGothic Md BT'), local('BankGothicBTMedium'), url('bankgthd-webfont.woff') format('woff'), url('bankgthd-webfont.ttf') format('truetype'), url('bankgthd-webfont.svg#webfontNgZtDOtM') format('svg');
font-weight: normal;
font-style: normal;
}
Примечание. Я получил эти файлы шрифтов где-то в http://fontsquirrel.com
Это работает для меня, но я использую этот шрифт также в разметке HTML, поэтому, возможно, обходной путь (если определение шрифта не помогает) может использовать этот шрифт в некотором скрытом div
, из Конечно, я запускаю все JS после нагрузок тела.
Ответ 2
Вы можете использовать загрузчик Google Web Font, но это довольно тяжеловесный и/или раздражающий для многих целей. Вместо этого я порекомендую библиотеку FontDetect Дженнифер Симондс, доступную в GitHub:
Класс JavaScript, который вы можете использовать для определения того, загружен ли webfont, какой шрифт используется элементом или реагирует на загрузку webfont (или не загружается).
Ответ 3
Этот вопрос должен помочь вам.
Нанесение текста на < холст > с @font-face не работает в первый раз
Ответ 4
Для людей, которые приходят к этому вопросу примерно к 2017 году, было бы лучше использовать Web Font Loader, который был совместно создан Google и Typekit, расположенный здесь:
- https://github.com/typekit/webfontloader
Ответ 5
ПРИМЕЧАНИЕ: устаревшее с 2016 года
Используйте этот трюк и привяжите событие onerror
к элементу Image
.
Демо здесь: http://jsfiddle.net/g6LyK/ - работает с последним Chrome.
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = 'http://fonts.googleapis.com/css?family=Vast+Shadow';
document.getElementsByTagName('head')[0].appendChild(link);
// Trick from /questions/73200/javascript-capturing-load-event-on-link
var image = new Image;
image.src = link.href;
image.onerror = function() {
ctx.font = '50px "Vast Shadow"';
ctx.textBaseline = 'top';
ctx.fillText('Hello!', 20, 10);
};
Ответ 6
Как насчет того, чтобы поместить ваш url в строку:
@font-face{
font-family:"Officina";
src:url('OfficinaSansStd-Book.otf');
}
context.font = "30px Officina";