【问题标题】:svg.js animating a combined plot and dmovesvg.js 动画组合的情节和 dmove
【发布时间】:2018-07-02 07:19:16
【问题描述】:

我正在尝试研究如何在 sgv.js 中为 plotdmove 组合设置动画。

我期待如果我在 animate 之后将 plotdmove 链接在一起,我的路径将从原始几何图形动画到 plot 加上 dmove 的结果几何图形:

myPath.animate().plot('20,20 25,20 25,25 20,25').dmove(100, 100)

但是,dmove 似乎与 plot 无关,而是与原始路径几何 (myPath) 相关。

我尝试使用 CODEPEN demonstrate this concept

path1path2 都从 X:50 开始,应该在 X:200 结束。但是,plot 添加的 50 似乎被忽略了。

我考虑的另一种方法是在将几何传递给animate 函数之前更改几何:

var geometry = new SVG.PointArray('20,20 25,20 25,25 20,25')
geometry.dmove(100, 100)

myPath.animate().plot(geometry)

但是PointArrayPathArray 类没有dmove 函数。

svg.js 库非常广泛,我认为我遗漏了一些明显的东西。

【问题讨论】:

    标签: javascript svg.js


    【解决方案1】:

    您面临的问题是,dmove() 的评估时间早于您想要的。 dmove 只是在计算出输入和 bbox 的新坐标后直接映射到 move。由于您的动画一开始是在您的起点,因此对 dmove 的调用会看到“旧”bbox 并将其用于其相对移动。

    首先计算您的结果起点(如您在第二次尝试中所做的那样)是要走的路。 Path 和 PointArray 可能没有 dmove 方法,但它们有 bbox 方法,因此您可以编写自己的 dmove:

    SVG.extend(SVG.PathArray, SVG.PointArray, {
      dmove: function (dx, dy) {
        var bbox = this.bbox()
        this.move(bbox.x + dx, bbox.y + dy)
        return this
      }
    })
    
    new SVG.PointArray('20,20 25,20 25,25 20,25').dmove(100, 100)
    

    你不需要为此编写方法。你也可以用手来做。但是我发现直接添加功能更流畅

    【讨论】:

    • 我过去曾尝试过您的建议,但没有成功。我从 SVG.parser.poly.setAttribute('points', this.toString()) 的 bbox 函数收到错误 Cannot read property 'setAttribute' of undefined。上面的示例中有两个错别字,我已经对其进行了编辑,正在等待审核。如果你自己运行它,你应该会得到同样的错误......我希望。
    • 刚试过。它就像一个魅力。感谢您的编辑。我着急写了。仍然有一个缺失的返回,我现在将添加......当你运行它时你的 dom 加载了吗?因为当 dom 尚未加载时解析器不存在,这可能导致您遇到的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2019-01-30
    • 1970-01-01
    • 2021-05-23
    • 2014-05-11
    • 2019-04-18
    相关资源
    最近更新 更多