Предварительный просмотр фона и цвета холста HTML5

Как изменить цвет фона и текста в режиме предварительного просмотра для холста HTML5?

Код, который я привел на [JSFiddle][1], изменяет цвет фона и текста только после закрытия цветовой палитры. Мне также нужны переменные font-family и font-size для текста на холсте. Я нигде не мог найти решения.

Если код не может быть запущен, пожалуйста, решите проблему, создав html-файл.

Пожалуйста, посмотрите это [изображение][2] для получения дополнительной информации.

Любые предложения и помощь будут оценены.

[1]: https://jsfiddle.net/p0z1vau3/
[2]: https://stackru.com/images/887a79d7ba1b555d6b3f911f5ba5debb4609dc35.png

2 ответа

Решение

В вашем коде измените 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();
}
Другие вопросы по тегам