【问题标题】:Custom Editor using kineticjs text underline使用 kineticjs 文本下划线的自定义编辑器
【发布时间】:2014-03-01 02:05:23
【问题描述】:

我正在尝试使用 kineticjs 构建一个编辑器,它具有一些文本样式。我被困在必须添加文本下划线样式的地方。有没有办法实现这个功能?

喜欢-

示例文本


【问题讨论】:

    标签: kineticjs


    【解决方案1】:

    没有用于下划线的内置选项。

    KineticJS 建立在 html5 画布上,画布没有用于下划线的文本装饰。

    唯一的解决方法是在文本下方手动画一条线

    • 创建一个组
    • 将 Kinetic.Text 添加到组中
    • 将 Kinetic.Line 添加到用于为文本加下划线的组中
    • 测量文本的宽度
    • 按照测量值制作线条宽度
    • 根据需要制作线条的基线Y

    这是示例代码和演示:http://jsfiddle.net/m1erickson/r2ZsK/

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Prototype</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
        <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.2.min.js"></script>
    <style>
    body{padding:20px;}
    #container{
      border:solid 1px #ccc;
      margin-top: 10px;
      width:350px;
      height:350px;
    }
    </style>        
    <script>
    $(function(){
    
        var stage = new Kinetic.Stage({
            container: 'container',
            width: 350,
            height: 350
        });
        var layer = new Kinetic.Layer();
        stage.add(layer);
    
        var utilCanvas=document.createElement("canvas");
        var utilCtx=utilCanvas.getContext("2d");
    
        createUnderlinedText("sample text",20,50,18,"verdana",19);
    
        function createUnderlinedText(text,x,y,fontsize,fontfamily,baselineY){
    
            if(!baselineY){ baselineY=fontsize+1; }
    
            utilCtx.font=fontsize+" "+fontfamily;
            var textWidth=utilCtx.measureText(text).width;
    
            var ulText=new Kinetic.Group({
                x:x,
                y:y,
                draggable:true,
            });
            layer.add(ulText);
    
            var text = new Kinetic.Text({
                x:0,
                y:0,
                text:"sample text",
                fontSize:fontsize,
                fontFamily:fontfamily,
                fill: 'black',
            });
            ulText.add(text);
    
            var ul=new Kinetic.Line({
                points:[0,baselineY,textWidth,baselineY],
                strokeWidth:1,
                stroke:"black"
            });
            ulText.add(ul);
    
            layer.draw();
    
        }
    
    }); // end $(function(){});
    
    </script>       
    </head>
    <body>
        <div id="container"></div>
    </body>
    </html>
    

    说了这么多,恕我直言……如果您需要一个文本编辑器,那里有很多功能齐全的编辑器。选择其中之一比使用 html 画布绘制风格化文本要容易得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 2019-12-01
      • 2015-02-18
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      相关资源
      最近更新 更多