如何使用文本锚点:fabric js 中的中间

DS9

我已经从 fabric js 创建了 svg。在创建卡片时,我使用以下代码将文本对齐应用于对象:

activeObj.set({
    textAlign : 'center',
});
canvas.renderAll();

所以我的 svg 如下所示:

https://codepen.io/dhavalsisodiya/pen/BrRbRG

现在,当我用原始值更改我的 {company_address} 地址变量时,该文本应该居中对齐,但事实并非如此。

https://codepen.io/dhavalsisodiya/pen/VXbRzy

然后我手动修改了 SVG,我添加text-anchor="middle"了 SVG 的 tspan 标签(这是我的变量的放置)

https://codepen.io/dhavalsisodiya/pen/ZxKPab

添加后,我的文本出现在 SVG 的中心。

那么有没有办法使用fabric js来做到这一点,所以text-anchor="middle"当我应用文本对齐时它包含

更新

我也应用了 textAnchor,但它没有转换为 svg。

代码笔

https://codepen.io/dhavalsisodiya/pen/gvQooL

DS9

感谢@AndreaBogazzi,我能够使用以下方法解决它:

我已经修改了结构 js 文件,如下所示:

增加了'text-anchor="' + this.textAnchor + '" ',_wrapSVGTextAndBg: function(markup, textAndBg) {作为@AndreaBogazzi建议。

/**
 * @private
 */
_wrapSVGTextAndBg: function(markup, textAndBg) {
  var noShadow = true, filter = this.getSvgFilter(),
      style = filter === '' ? '' : ' style="' + filter + '"',
      textDecoration = this.getSvgTextDecoration(this);
  markup.push(
    '\t<g ', this.getSvgId(), 'transform="', this.getSvgTransform(), this.getSvgTransformMatrix(), '"',
    style, '>\n',
    textAndBg.textBgRects.join(''),
    '\t\t<text xml:space="preserve" ',
    'text-anchor="' + this.textAnchor + '" ',
    (this.fontFamily ? 'font-family="' + this.fontFamily.replace(/"/g, '\'') + '" ' : ''),
    (this.fontSize ? 'font-size="' + this.fontSize + '" ' : ''),
    (this.fontStyle ? 'font-style="' + this.fontStyle + '" ' : ''),
    (this.fontWeight ? 'font-weight="' + this.fontWeight + '" ' : ''),
    (textDecoration ? 'text-decoration="' + textDecoration + '" ' : ''),
    'style="', this.getSvgStyles(noShadow), '"', this.addPaintOrder(), ' >',
    textAndBg.textSpans.join(''),
    '</text>\n',
    '\t</g>\n'
  );
},

然后我修改了以下内容:

_createTextCharSpan: function(_char, styleDecl, left, top) {
  var styleProps = this.getSvgSpanStyles(styleDecl, _char !== _char.trim()),
      fillStyles = styleProps ? 'style="' + styleProps + '"' : '';

    //Addded to support text-anhor middle
    if(this.textAnchor==='middle')
    {
        return [
            '\t\t\t<tspan  ',
            fillStyles, '>',
            fabric.util.string.escapeXml(_char),
            '</tspan>\n'
        ].join('');
    }
    else
    {
        return [
            '\t\t\t<tspan x="', toFixed(left, NUM_FRACTION_DIGITS), '" y="',
            toFixed(top, NUM_FRACTION_DIGITS), '" ',
            fillStyles, '>',
            fabric.util.string.escapeXml(_char),
            '</tspan>\n'
          ].join('');
    }
},

扩展 toObjectTo 以在 json 中添加 textAnchor,请参见此处:extend toObject

$('.text_alignment').click(function(){
   var cur_value = $(this).attr('data-action');
    var activeObj = canvas.getActiveObject();
    if (cur_value != '' && activeObj) {
        activeObj.set({
            textAlign : cur_value,
            textAnchor : 'middle'
        });
        //To modify Object
        activeObj.toObject = (function(toObject) {
          return function() {
            return fabric.util.object.extend(toObject.call(this), {
              textAnchor: 'middle'
            });
          };
        })(activeObj.toObject);

        //activeObj.textAnchor  = cur_value;
        canvas.renderAll();
    }
    else
    {
        alert('Please select text');
        return false;
    }
});

通过进行上述更改,现在即使我修改了文本,我的变量也会保持中间状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何编写中间件以修改Node JS中的响应

来自分类Dev

如何使用填充100%的锚点/链接使TD中的文本居中

来自分类Dev

如何使用填充100%的锚点/链接使TD中的文本居中

来自分类Dev

php图像中的中间/中间文本

来自分类Dev

如何让锚点跨度文本显示在 css 或 scss 中的锚点之前

来自分类Dev

使用express.js和locomotive.js在中间件中添加api令牌

来自分类Dev

无极中间件在节点js回调函数中如何使用多个呢?

来自分类Dev

如何从多部分表单数据中获取Node JS中间件中的请求正文?

来自分类Dev

如何在express.js中制作中间件的动态链

来自分类Dev

如何在Node.js中编写中间件类

来自分类Dev

如何针对特定/不同的请求方法在NEST JS中处理多个中间件?

来自分类Dev

如何将值从中间件传递到Express.js中的路由?

来自分类Dev

node.js如何从中间件内部的redis数据库中获取数据

来自分类Dev

如何在Itext Fabric JS中删除默认文本

来自分类Dev

如何使用 IIS 重写模块删除 url 中的锚点?

来自分类Dev

使用js滚动到锚点

来自分类Dev

如何从路由器调用app.js中的Express 4.0中间件功能?

来自分类Dev

如何使用Flutter中的Column在屏幕中间显示文本?

来自分类Dev

如何将中间件路由器用于Express Node.js中的子路径

来自分类Dev

URL中的文本突出显示锚点如何工作?(例如#:〜:text = highlight%20this)

来自分类Dev

滚动页面中其他div锚点时如何更改导航文本颜色

来自分类Dev

Chart.js-如何在图表中间添加文本?

来自分类Dev

如何使用js替换svg中的文本?

来自分类Dev

隐藏HTML中溢出文本的中间

来自分类Dev

div中的中间对齐图标+文本

来自分类Dev

如何在Fabric.js中获取多边形点

来自分类Dev

如何在Fabric.js中获取多边形点

来自分类Dev

使用文本和矩形设计QML中的3个中间点(...)

来自分类Dev

如何使用Fabric JS中的英寸和毫米等单位

Related 相关文章

  1. 1

    如何编写中间件以修改Node JS中的响应

  2. 2

    如何使用填充100%的锚点/链接使TD中的文本居中

  3. 3

    如何使用填充100%的锚点/链接使TD中的文本居中

  4. 4

    php图像中的中间/中间文本

  5. 5

    如何让锚点跨度文本显示在 css 或 scss 中的锚点之前

  6. 6

    使用express.js和locomotive.js在中间件中添加api令牌

  7. 7

    无极中间件在节点js回调函数中如何使用多个呢?

  8. 8

    如何从多部分表单数据中获取Node JS中间件中的请求正文?

  9. 9

    如何在express.js中制作中间件的动态链

  10. 10

    如何在Node.js中编写中间件类

  11. 11

    如何针对特定/不同的请求方法在NEST JS中处理多个中间件?

  12. 12

    如何将值从中间件传递到Express.js中的路由?

  13. 13

    node.js如何从中间件内部的redis数据库中获取数据

  14. 14

    如何在Itext Fabric JS中删除默认文本

  15. 15

    如何使用 IIS 重写模块删除 url 中的锚点?

  16. 16

    使用js滚动到锚点

  17. 17

    如何从路由器调用app.js中的Express 4.0中间件功能?

  18. 18

    如何使用Flutter中的Column在屏幕中间显示文本?

  19. 19

    如何将中间件路由器用于Express Node.js中的子路径

  20. 20

    URL中的文本突出显示锚点如何工作?(例如#:〜:text = highlight%20this)

  21. 21

    滚动页面中其他div锚点时如何更改导航文本颜色

  22. 22

    Chart.js-如何在图表中间添加文本?

  23. 23

    如何使用js替换svg中的文本?

  24. 24

    隐藏HTML中溢出文本的中间

  25. 25

    div中的中间对齐图标+文本

  26. 26

    如何在Fabric.js中获取多边形点

  27. 27

    如何在Fabric.js中获取多边形点

  28. 28

    使用文本和矩形设计QML中的3个中间点(...)

  29. 29

    如何使用Fabric JS中的英寸和毫米等单位

热门标签

归档