具有用户文本字段输入的动态画布

Kinetic canvas with user text field input

本文关键字:动态 输入 字段 用户 文本      更新时间:2024-03-31

我拔掉了大部分头发,试图找到一个解决方案,但没有成功。我知道这一定很容易,但作为一个javascript新手,我似乎无法理解,希望有人能帮助我!!!

我正在尝试创建一个简单的画布元素,它上面有一个带文本的图像(带包装)。文本将来自画布外的文本字段(没有什么花哨的)。我看到了当文本输入到文本字段时,画布中填充文本的位置,这正是我想要的(没有提交按钮)。最终,我需要添加两个具有不同信息的额外文本字段,做同样的事情,但现在我很乐意添加一个!

动态文本教程在这里找到(http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-text-tutorial/-下面的代码)将是完美的,如果我只能弄清楚如何从常规文本输入字段中提取"复杂文本",而不是硬编码!

如有任何帮助,我们将不胜感激!

无输入文本字段的工作代码:

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.4.min.js"></script>
    <script defer="defer">
      var stage = new Kinetic.Stage({
        container: 'container',
        width: 578,
        height: 220
      });
      var layer = new Kinetic.Layer();
      var simpleText = new Kinetic.Text({
        x: stage.getWidth() / 2,
        y: 15,
        text: 'Simple Text',
        fontSize: 30,
        fontFamily: 'Calibri',
        fill: 'green'
      });
      // to align text in the middle of the screen, we can set the
      // shape offset to the center of the text shape after instantiating it
      simpleText.setOffset({
        x: simpleText.getWidth() / 2
      });
      // since this text is inside of a defined area, we can center it using
      // align: 'center'
      var complexText = new Kinetic.Text({
        x: 100,
        y: 60,
        text: 'COMPLEX TEXT'n'nAll the world''s a stage, and all the men and women merely players. They have their exits and their entrances.',
        fontSize: 18,
        fontFamily: 'Calibri',
        fill: '#555',
        width: 380,
        padding: 20,
        align: 'center'
      });
      var rect = new Kinetic.Rect({
        x: 100,
        y: 60,
        stroke: '#555',
        strokeWidth: 5,
        fill: '#ddd',
        width: 380,
        height: complexText.getHeight(),
        shadowColor: 'black',
        shadowBlur: 10,
        shadowOffset: [10, 10],
        shadowOpacity: 0.2,
        cornerRadius: 10
      });
      // add the shapes to the layer
      layer.add(simpleText);
      layer.add(rect);
      layer.add(complexText);
      stage.add(layer);
    </script>
  </body>
</html>

可能的解决方案:要添加一个输入字段,请设置事件侦听器,该侦听器在其值发生变化时启动,然后开始绘制。

  <body>
    <div id="container"></div>
    <input type="text" id='complexText' size="20"/>
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.4.min.js"></script>
    <script defer="defer">
    var inputField = document.getElementById('complexText');
    inputField.addEventListener('change', function() {
            var inputText = this.value;
            showText(inputText);
        }, false);
    function showText(inputText) {
         *** here goes all your 'Kinetic' code ***
    }

请参阅jsBin中的示例。