HTML5 Canvas 背景和颜色的实时预览
Live preview for HTML5 Canvas background and color
如何使用 HTML5 canvas 的实时预览更改背景和文本颜色?
我在 [JSFiddle][1] 上给出的代码仅在调色板关闭后才更改背景和文本颜色。我还想要 canvas 上的文本的可变字体系列和字体大小。我在任何地方都找不到解决方案。
如果代码不能运行,请通过创建html文件来解决问题。
请查看此[图片][2] 了解更多信息。
如有任何建议和帮助,我们将不胜感激。
[1]: https://jsfiddle.net/p0z1vau3/
[2]: https://i.stack.imgur.com/ZpETT.png
[3]: Source: https://codepen.io/stefan0uh/pen/QzJVxa
在您的代码中将 eventListener 更改为:
color.addEventListener("input", render);
bgcolor.addEventListener("input", render);
您可以在此处阅读有关颜色选择器的更多信息:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/color
如果您需要如何编写更改字体大小和字体系列的代码,请使用以下代码。它还包括对这两个问题的回答。用这个替换你的 javascript 代码。
const color = document.getElementById("color");
const canvas = document.getElementById("canvas");
const style = document.getElementById("font-family");
const size = document.getElementById("font-size");
const ctx = canvas.getContext("2d");
// onload
window.onload = () => {
render();
};
// Eventlistner
color.addEventListener("input", render);
bgcolor.addEventListener("input", render);
style.addEventListener("change", render);
size.addEventListener("change", render);
// text positions
function render() {
drawBackground();
drawText("top", canvas.height - 48,size.value,style.value);
drawText("bottom", canvas.height - 18);
}
// Need live preview for background color
function drawBackground() {
ctx.fillStyle = bgcolor.value;
ctx.fillRect(0, canvas.height - 80, canvas.width + 10, 150);
ctx.restore();
}
function drawText(text, position, fontSize, fontStyle) {
ctx.fillStyle = "#ffffff";
ctx.font = fontSize+"px "+ fontStyle; // Need variable font-family & size
// Need live preview for color
var top = [{
text: ` Text`, font: `lighter ${ctx.font}`, fillStyle: color.value}];
var bottom = [{
text: `......Text`,
font: `lighter ${ctx.font}`,
fillStyle: color.value }];
fillMixedText(ctx, text === "top" ? top : bottom, 20, position);//text positioning
}
// fillStyle
function fillMixedText(ctx, args, x, y) {
let defaultFillStyle = ctx.fillStyle;
let defaultFont = ctx.font;
args.forEach(({ text, fillStyle, font }) => {
ctx.fillStyle = fillStyle || defaultFillStyle;
ctx.font = font || defaultFont;
ctx.fillText(text, x, y);
x += ctx.measureText(text).width;
});
ctx.restore();
}
如何使用 HTML5 canvas 的实时预览更改背景和文本颜色?
我在 [JSFiddle][1] 上给出的代码仅在调色板关闭后才更改背景和文本颜色。我还想要 canvas 上的文本的可变字体系列和字体大小。我在任何地方都找不到解决方案。
如果代码不能运行,请通过创建html文件来解决问题。
请查看此[图片][2] 了解更多信息。
如有任何建议和帮助,我们将不胜感激。
[1]: https://jsfiddle.net/p0z1vau3/
[2]: https://i.stack.imgur.com/ZpETT.png
[3]: Source: https://codepen.io/stefan0uh/pen/QzJVxa
在您的代码中将 eventListener 更改为:
color.addEventListener("input", render);
bgcolor.addEventListener("input", render);
您可以在此处阅读有关颜色选择器的更多信息:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/color
如果您需要如何编写更改字体大小和字体系列的代码,请使用以下代码。它还包括对这两个问题的回答。用这个替换你的 javascript 代码。
const color = document.getElementById("color");
const canvas = document.getElementById("canvas");
const style = document.getElementById("font-family");
const size = document.getElementById("font-size");
const ctx = canvas.getContext("2d");
// onload
window.onload = () => {
render();
};
// Eventlistner
color.addEventListener("input", render);
bgcolor.addEventListener("input", render);
style.addEventListener("change", render);
size.addEventListener("change", render);
// text positions
function render() {
drawBackground();
drawText("top", canvas.height - 48,size.value,style.value);
drawText("bottom", canvas.height - 18);
}
// Need live preview for background color
function drawBackground() {
ctx.fillStyle = bgcolor.value;
ctx.fillRect(0, canvas.height - 80, canvas.width + 10, 150);
ctx.restore();
}
function drawText(text, position, fontSize, fontStyle) {
ctx.fillStyle = "#ffffff";
ctx.font = fontSize+"px "+ fontStyle; // Need variable font-family & size
// Need live preview for color
var top = [{
text: ` Text`, font: `lighter ${ctx.font}`, fillStyle: color.value}];
var bottom = [{
text: `......Text`,
font: `lighter ${ctx.font}`,
fillStyle: color.value }];
fillMixedText(ctx, text === "top" ? top : bottom, 20, position);//text positioning
}
// fillStyle
function fillMixedText(ctx, args, x, y) {
let defaultFillStyle = ctx.fillStyle;
let defaultFont = ctx.font;
args.forEach(({ text, fillStyle, font }) => {
ctx.fillStyle = fillStyle || defaultFillStyle;
ctx.font = font || defaultFont;
ctx.fillText(text, x, y);
x += ctx.measureText(text).width;
});
ctx.restore();
}