Cra*_*lot 4 html javascript icons canvas html5-canvas
这个精彩的答案详细说明了如何在 HTML 画布中包含来自 FontAwesome 的图标。但是,从 Material Design 调整图标字体的代码不起作用。除了替换 Material Design 值的 FontAwesome 值外,所有代码都相同。
代码如下。
代码笔: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);
});
Run Code Online (Sandbox Code Playgroud)
使用FontFace界面。
它所需要的只是你的字体文件的 url。它的load()方法将返回一个 Promise 来解决字体何时可以使用。
const ctx = canvas.getContext('2d');
const material_font = new FontFace( 'material-icons',
// pass the url to the file in CSS url() notation
'url(https://fonts.gstatic.com/s/materialicons/v48/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2)' );
document.fonts.add( material_font ); // add it to the document's FontFaceSet
const framework7_font = new FontFace( 'framework7-icons',
'url(https://cdn.jsdelivr.net/gh/framework7io/framework7-icons@master/fonts/Framework7Icons-Regular.woff2)' );
document.fonts.add( framework7_font );
// wait the font loads
material_font.load().then( () => {
// we're good to use it
ctx.fillStyle = 'green';
ctx.font = '20px material-icons';
ctx.fillText('airplanemode_active', 20, 40);
}).catch( console.error );
framework7_font.load().then( () => {
ctx.fillStyle = 'blue';
ctx.font = '20px framework7-icons';
ctx.fillText('airplane', 20, 80);
}).catch( console.error );Run Code Online (Sandbox Code Playgroud)
<canvas id="canvas"></canvas>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1004 次 |
| 最近记录: |