HTML5 在画布上编辑文本

新手上路,请多包涵

我正在尝试创建类似于 http://www.listings.com 的 内容,您可以在其中编辑画布中的文本。

我已经阅读了另一篇文章 HTML5 Canvas Text Edit 。但我不想在画布外编辑文本。我想编辑画布中的文本。

如果有人能指出我正确的方向,我将不胜感激。

谢谢

原文由 asagura 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 236
1 个回答

首先,Mohsen 正确地指出,当您执行 context.fillText 时,您实际上是在画布上“绘制字母图片”。它不像文字处理器!

您可以捕获窗口上的按键事件,然后将击键写到您的画布上。

这是代码和小提琴: http://jsfiddle.net/m1erickson/7tXd4/

此示例仅键入小写字母 az(无大写字母、空格、退格符等)

您可能希望进行更多增强,例如:

  • 添加更多键(AZ、0-9 等)。
  • 响应退格键等命令键以从 keyHistory 中删除字母。
  • 放置一个光标,以便用户在键入时知道他们所在的位置(提示: http ://www.html5canvastutorials.com/tutorials/html5-canvas-text-metrics/)
  • 如果您允许多行文本,请处理 [enterkey] 并移至新行。
  • ETC

这是让 您入门的 代码:

 <!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>

<style>
    body{ background-color: ivory; padding:20px; }
    canvas{border:1px solid red;}
</style>

<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    ctx.font="18px Arial";

    var keyHistory="";

    window.addEventListener("keyup", keyUpHandler, true);

    function addletter(letter){
        keyHistory+=letter;
        ctx.clearRect(0,0,300,300);
        ctx.fillText(keyHistory,20,20);
    }

    function keyUpHandler(event){
        var letters="abcdefghijklmnopqrstuvwxyz";
        var key=event.keyCode;
        if(key>64 && key<91){
            var letter=letters.substring(key-64,key-65);
            addletter(letter);
        }
    }

}); // end $(function(){});
</script>

</head>

<body>
    <p>First click in the red canvas below</p><br/>
    <p>Then type any lowercase letters from a-z</p><br/>
    <canvas id="canvas" width=300 height=100></canvas>
</body>
</html>

原文由 markE 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题