【发布时间】:2019-11-24 01:08:00
【问题描述】:
This wonderful answer 详细介绍了如何在 HTML 画布中包含来自 FontAwesome 的图标。但是,从 Material Design 调整图标字体的代码是行不通的。除了将 FontAwesome 值替换为 Material Design 值之外,所有代码都是相同的。
代码如下。
Codepen:https://codepen.io/Crashalot/pen/dyyEPWV
1) 如何将 Material Design 中的图标合并到 HTML 画布中?
2) 如何合并来自任何图标字体(例如,https://github.com/framework7io/framework7-icons)的图标?
var FontAwesome = function () {
return new Promise(function (done, failed) {
var me = {},
FACache = {};
function find (name) {
var elm = document.createElement('i');
elm.className = 'fa fa-' + name;
elm.style.display = 'none';
document.body.appendChild(elm);
var content = window.getComputedStyle(
elm, ':before'
).getPropertyValue('content')
document.body.removeChild(elm);
return content;
};
me.get = function (name) {
if (!!FACache[name]) return FACache[name];
var c = find(name)[1];
FACache[name] = c;
return c;
};
(function() {
var l = document.createElement('link'); l.rel = 'stylesheet';
l.onload = function () {
document.fonts.load('10px Material Icons')
.then(function (e) { done(me); })
.catch(failed);
}
l.href = '//fonts.googleapis.com/icon?family=Material+Icons';
var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h);
}());
});
};
FontAwesome()
.then(function (fa) {
var canvas = document.getElementById('mycanvas');
const x = canvas.width / 2;
const y = canvas.height / 2;
// All set, and ready to render!
var ctx = canvas.getContext('2d');
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.font = '400px Material Icons';
ctx.fillText(fa.get("airplanemode_active"), x, y);
});
【问题讨论】:
标签: javascript html canvas html5-canvas icons