【问题标题】:Kinetic canvas with user text field input具有用户文本字段输入的动态画布
【发布时间】:2013-12-05 19:21:32
【问题描述】:

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

我正在尝试创建一个简单的画布元素,它上面有一个带有文本(带环绕)的图像。文本将来自画布外部的文本字段(没什么花哨的)。我已经看到画布在哪里填充了文本,因为它被输入到我正在寻找的文本字段中(没有提交按钮)。最终,我将需要添加 2 个具有不同信息的额外文本字段,做同样的事情,但现在我很乐意让一个工作!

如果我能弄清楚如何从常规文本输入字段中提取“复杂文本”而不​​是硬编码,那么在此处找到的动态文本教程(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>

【问题讨论】:

    标签: javascript canvas kineticjs


    【解决方案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

    【讨论】:

    • @user3071695:更新了 jsBin 中的示例,以便您检查代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多