javascript - 无法使用 Snap.svg 在文本路径上设置 startOffset 属性

标签 javascript svg snap.svg

我正在尝试使用 Snap.svg 在圆弧中间呈现文本。

这可以通过这样的 SVG 实现:

<defs>
    <path id="path1" d="M30 40 C 50 10, 70 10, 120 40 S 150 0, 200 40"/>
</defs>
<text text-anchor="middle">    
    <textPath xlink:href="#path1" startOffset="50%">
        Text on a curved path
    </textPath>
</text>

我得到的是这样的(请忽略具体坐标):

<path d="M 352.5 14.1 A 338.4 338.4 0 0 1 645.5 183.3" id="path1"></path>
<text x="0" y="0" style="text-anchor: middle;">
    <textPath xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#path1">
        Lorem Ipsum
    </textPath>
</text>

当我在 Snap.svg 中执行此操作时:

var labelArc = paper
               .path('M 352.5 14.1 A 338.4 338.4 0 0 1 645.5 183.3')
               .attr('startOffset': '50%'});

paper
.text(0, 0, 'Lorem Ipsum')
.attr({
    'text-anchor'   : 'middle',
    'textpath'      : labelArc
});

问题是 startOffset 属性没有传递给文本路径。 通过 CSS 设置此属性也不起作用。

我做错了什么还是需要一些奇特的解决方法?

最佳答案

好吧,我想出了一个办法......

只需将文本分配给一个变量并像这样设置 startOffset:

var label = paper
            .text(0, 0, 'Lorem Ipsum')
            .attr({
                'text-anchor'   : 'middle',
                'textpath'      : labelArc
            });
label.textPath.attr({ startOffset: '50%' });

可能有更优雅的方法,但这至少是可行的。

关于javascript - 无法使用 Snap.svg 在文本路径上设置 startOffset 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494546/

相关文章:

javascript - Firefox 扩展中 JavaScript 中的 HTTP POST

ios - 有没有办法在 IOS 上使用 SVG 中的 anchor 链接?

javascript - 使用 CSS 和 JS 设置 SVG 样式

javascript - 无法在 SVG 中按 ID 找到流动文本元素

javascript - 如何使用 Snap.svg 选择现有 SVG 的片段

javascript - 如何在 Meteor 中对光标处的项目进行分组?

javascript - 使用 CSS 制作 mask 盒动画?

javascript - Sails.js 中两个模型的关联

javascript - 使用 Snap 对分组/分层 SVG 进行动画处理

reactjs - React 中的 Snap.svg - 如何在生命周期方法中访问 svg?