You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面加载时显示#outputText与#imageContainer的空框或自定义字母预览

实现页面加载时的空框/预览效果

要解决页面加载时#outputText和#imageContainer无内容的问题,可通过两种方式实现:添加视觉占位框,或直接展示自定义字母的预览效果,以下是具体修改方案:

方案1:显示空框占位

这种方式给两个容器添加基础样式,让页面加载时就有清晰的视觉区域,同时生成空白背景的图片容器。

修改后的CSS

body {
  text-align: center;
  margin-top: 100px;
}

#inputText {
  font-size: 24px;
  padding: 10px;
}

#outputText {
  font-family: "Courier New", Courier, monospace;
  font-size: 48px;
  margin-top: 20px;
  /* 添加空框样式 */
  border: 1px solid #ccc;
  min-height: 60px;
  line-height: 60px;
  background-color: #f5f5f5;
}

#imageContainer {
  margin-top: 20px;
  /* 添加空框样式 */
  border: 1px solid #ccc;
  min-height: 80px;
  background-color: #f5f5f5;
  display: flex;
  align-items: center;
  justify-content: center;
}

.button {
  margin-top: 20px;
}

.option {
  margin-top: 10px;
}

修改后的JavaScript

在$(document).ready末尾直接调用generateFont(),同时处理空文本时的图片生成逻辑:

$(document).ready(function() {
  const inputText = $('#inputText');
  const outputText = $('#outputText');
  const imageContainer = $('#imageContainer');
  const fontSizeInput = $('#fontSize');
  const fontColorInput = $('#fontColor');
  const backgroundColorInput = $('#backgroundColor');
  const fontWeightSelect = $('#fontWeight');
  const downloadButton = $('#downloadButton');
  const copyButton = $('#copyButton');
  inputText.on('input', generateFont);
  fontSizeInput.on('input', generateFont);
  fontColorInput.on('input', generateFont);
  backgroundColorInput.on('input', generateFont);
  fontWeightSelect.on('change', generateFont);
  downloadButton.on('click', downloadImage);
  copyButton.on('click', copyText);

  // 页面加载时立即执行一次,生成空框/空白图片
  generateFont();

  function generateFont() {
    const text = inputText.val();
    const transformedText = transformText(text);
    outputText.text(transformedText);

    generateImage(transformedText);
  }

  function transformText(text) {
    const alphabet = {
      'A': 'Λ',
      'B': 'ß',
      'C': 'Ͼ',
      'D': 'Ð',
      'E': 'Σ',
      'F': 'Ŧ',
      'G': '₲',
      'H': 'Ή',
      'I': 'ł',
      'J': 'J',
      'K': 'Ҝ',
      'L': 'Ł',
      'M': 'M',
      'N': 'И',
      'O': 'Ø',
      'P': '₱',
      'Q': 'Q',
      'R': 'S',
      'S': 'Ş',
      'T': 'Ŧ',
      'U': 'Ц',
      'V': 'V',
      'W': '₩',
      'X': 'Ж',
      'Y': 'Ψ',
      'Z': 'Z'
    };

    const transformedText = text
      .toUpperCase()
      .split('')
      .map((char) => (alphabet.hasOwnProperty(char) ? alphabet[char] : char))
      .join('');

    return transformedText;
  }

  function generateImage(text) {
    const canvas = $('<canvas>')[0];
    const context = canvas.getContext('2d');
    const fontSize = parseInt(fontSizeInput.val());
    const fontColor = fontColorInput.val();
    const backgroundColor = backgroundColorInput.val();
    const fontWeight = fontWeightSelect.val();

    // 处理空文本情况,设置最小画布尺寸
    let textWidth = context.measureText(text).width;
    let textHeight = fontSize;
    if (!text) {
      textWidth = 300;
      textHeight = 80;
    }

    canvas.width = textWidth;
    canvas.height = textHeight;

    context.fillStyle = backgroundColor;
    context.fillRect(0, 0, canvas.width, canvas.height);

    if (text) {
      context.fillStyle = fontColor;
      context.font = `${fontWeight} ${fontSize}px "Courier New", Courier, monospace`;
      context.textBaseline = 'middle';
      context.fillText(text, 0, canvas.height / 2);
    }

    const imageElement = $('<img>').attr('src', canvas.toDataURL('image/png'));
    imageContainer.html(imageElement);
  }

  function downloadImage() {
    const imageElement = imageContainer.find('img')[0];
    const link = $('<a>').attr('href', imageElement.src).attr('download', 'cool_font.png')[0];
    link.click();
  }

  function copyText() {
    const transformedText = outputText.text();
    navigator.clipboard.writeText(transformedText)
      .then(() => {
        alert('Text copied to clipboard!');
      })
      .catch((error) => {
        console.error('Error copying text to clipboard:', error);
      });
  }
});

方案2:显示自定义字母预览

如果希望页面加载时直接展示自定义字母的示例效果,修改generateFont()的初始化调用逻辑,传入预设的预览文本:

修改JavaScript中的初始化调用

将原来的generateFont()替换为:

// 页面加载时传入预览文本,展示自定义字母效果
inputText.val("ABCDE");
generateFont();
// 清空输入框,不影响用户后续输入
inputText.val("");

这样页面加载时会先生成"ABCDE"对应的转换文本和图片,然后清空输入框,既展示了预览效果,又不干扰用户操作。


内容的提问来源于stack exchange,提问作者Avanish Paswan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:32:08