动态画布与用户文本字段输入

时间:2013-12-05 19:21:32

标签: javascript canvas kineticjs

我掏出了大部分头发试图找到无效的解决方案。 我知道这一定很容易,但作为一个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>

1 个答案:

答案 0 :(得分:1)

可能的解决方案:添加一个输入字段,设置事件监听器,触发其值的更改,然后开始绘制。

  <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 ***
    }

请参阅example at jsBin