【问题标题】:FabricJS lineHeight on iText styles arrayiText 样式数组上的 FabricJS lineHeight
【发布时间】:2018-11-02 20:58:09
【问题描述】:

我正在用 FabricJs 将我的头撞到墙上。我正在寻找一种能够将行高应用于 iText 上的样式数组的解决方案;它似乎完全忽略了它。

所以如果我有 2 行文本并且希望第一行的行高为 5:

"测试线 1\n" "测试线 2\n"

我尝试如下的字符数组,它将字体大小应用于每个字符,但完全忽略了行高:

0:{
    0:{
        lineHeight:5,
        fontSize:10
    },
    1:{
        lineHeight:5,
        fontSize:10
    },
    2:{
        lineHeight:5,
        fontSize:10
    },
    3:{
        lineHeight:5,
        fontSize:10
    },
    4:{
        lineHeight:5,
        fontSize:10
    },
    5:{
        lineHeight:5,
        fontSize:10
    },
    6:{
        lineHeight:5,
        fontSize:10
    },
    7:{
        lineHeight:5,
        fontSize:10
    },
    8:{
        lineHeight:5,
        fontSize:10
    },
    9:{
        lineHeight:5,
        fontSize:10
    },
    10:{
        lineHeight:5,
        fontSize:10
    },
    11:{
        lineHeight:5,
        fontSize:10
    }
}    

【问题讨论】:

    标签: javascript fabricjs


    【解决方案1】:

    styles设置为对象,其中第一级是行号,然后是字符。

    演示

    var text = "Test Line 1\nTest Line 2\n";
    
    var canvas = new fabric.Canvas('canvas', {
      selection: false
    });
    
    var textObj = new fabric.Text(text, {
    lineHeight:5,
      styles: {
        1: {
          0: {
            fontSize: 10
          },
          1: {
            fontSize: 10
          },
          2: {
            fontSize: 10
          },
          3: {
            fontSize: 10
          },
          4: {
            fontSize: 10
          },
          5: {
            fontSize: 10
          },
          6: {
            fontSize: 10
          },
          7: {
            fontSize: 10
          },
          8: {
            fontSize: 10
          },
          9: {
            fontSize: 10
          },
          10: {
            fontSize: 10
          },
          11: {
            fontSize: 10
          }
        }
      }
    });
    
    canvas.add(textObj);
    canvas{
     border:2px solid #000;
    }
    <script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
    <canvas id='canvas' width=500 height=400>

    对于 V-1.7.5,fabric.IText 包含样式属性,fabric.Text 不存在

    演示

    var text = "Test Line 1\nTest Line 2\n";
    
    var canvas = new fabric.Canvas('canvas', {
      selection: false
    });
    
    var textObj = new fabric.IText(text, {
      lineHeight:5,
      styles: {
        1: {
          0: {
            fontSize: 5
          },
          1: {
            fontSize: 10
          },
          2: {
            fontSize: 10
          },
          3: {
            fontSize: 10
          },
          4: {
            fontSize: 10
          },
          5: {
            fontSize: 10
          },
          6: {
            fontSize: 10
          },
          7: {
            fontSize: 10
          },
          8: {
            fontSize: 10
          },
          9: {
            fontSize: 10
          },
          10: {
            fontSize: 10
          },
          11: {
            fontSize: 10
          }
        }
      }
    });
    
    canvas.add(textObj);
    canvas{
     border:2px solid #000;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.5/fabric.js"></script>
    <canvas id='canvas' width=500 height=400>

    【讨论】:

    • @GlenElkins 查看演示
    • 什么版本的面料?我认为我目前使用的是 1.7.5,想知道他们是否在以后的版本中修复了这个问题。唯一的问题是面料 2 他们改变了一些东西,现在 image clipTo 不一样了
    • 是的,我正在使用扩展的 itext,它不适用于 1.7.5 样式中的 lineHeight - 它只是忽略它,但应用了所有其他样式。这实际上可能是扩展类是问题所在。感谢您的帮助。
    • 所以,我测试了您的示例代码,但正如我所想,它不起作用。我将 lineHeight 更改为 50,它看起来和 5 没有什么不同。在 Safari 和 chrome 中
    • 如果您遍历字符并且选项中完全缺少 getCurrentCharStyle lineHeight ,似乎它的织物有一个错误
    猜你喜欢
    • 2016-03-07
    • 2016-03-12
    • 2016-03-04
    • 2021-10-22
    • 2021-09-19
    • 2014-10-28
    • 2015-07-08
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多