【问题标题】:Animating groups of paths Raphael动画路径组拉斐尔
【发布时间】:2012-07-07 01:08:48
【问题描述】:

我是 Raphael 和一般编码方面的新手,所以请耐心等待我处理这个问题。我在为 Raphael 中的路径组设置动画时遇到问题。我想要的效果是一组运行单个动画的路径,同时在纸上一致移动。这是一个例子:

path1 = paper.path("path string").attr({fill: "#fff", stroke: "#000"});
path2 = paper.path("path string").attr({fill: "#fff", stroke: "#000"});
path3 = paper.path("path string").attr({fill: "#fff", stroke: "#000"});
pathSet = paper.set(path1, path2, path3);
pathSet.animate({transform: "t500,500"}, 1000);

path1.mouseover(function(){path1.animate({transform: "s1.6,r10"}, 1000)});
path2.mouseover(function(){path2.animate({transform: "s1.6,r10"}, 1000)});
path3.mouseover(function(){path3.animate({transform: "s1.6,r10"}, 1000)});

在上面的例子中,pathSet 将按照它应该的方式进行动画处理,但是当我将鼠标悬停在各个路径上时,它们不仅会缩放和旋转,而且会转换回它们的原始坐标(它们之前的位置) pathSet 动画)。我在文档中阅读了有关转换的相对“t,r,s”和绝对“T,R,S”参数的信息,并认为就是这样,但它们似乎没有什么区别。非常感谢任何帮助!

【问题讨论】:

    标签: animation raphael


    【解决方案1】:

    您已经发现了我认为是拉斐尔最大的弱点之一:变换动画很难优雅地组合!

    这不是一个完美的解决方案,但您始终可以使用 mouseover/mouseout 处理程序来附加/抵消您想要的更改。例如:

    path1.mouseover(function(){path1.animate({transform: "...s1.5,r10"}, 1000)});
    path2.mouseover(function(){path2.animate({transform: "...s1.5,r10"}, 1000)});
    path3.mouseover(function(){path3.animate({transform: "...s1.5,r10"}, 1000)});
    
    path1.mouseout(function(){path1.animate({transform: "...s0.66,r-10"}, 1000)});
    path2.mouseout(function(){path2.animate({transform: "...s0.66,r-10"}, 1000)});
    path3.mouseout(function(){path3.animate({transform: "...s0.66,r-10"}, 1000)});
    

    只要您不需要来自任何给定元素的有状态反应,附加/计数器方法就可以正常工作。一旦发生这种情况,在我看来,为一种类型的对象创建一个包装类更有意义,该类将跟踪它应该在哪里,并根据需要调整绝对变换。但你可能不需要这样的东西。

    【讨论】:

    • 感谢您的回答,零。我确实考虑过使用鼠标移出,但我也需要路径来制作动画。我真的希望我错过了一些东西,但从你所说的来看,这似乎是一个固有的问题。有没有人写过任何类型的插件或扩展来解决这个问题?谢谢!
    • 所以我开始考虑为 Element 编写一个包装器来获取/设置绝对位置,然后遇到了另一个问题。在路径上设置 x 或 y 属性无效。您可以取回使用 attr() 设置的内容,但路径不会移动。什么给了?
    • 这是我的另一个烦恼。路径的“绝对”定位是在路径本身中进行编码,这正是翻译如此重要(而且令人沮丧地受到限制)的原因。相信我,我能感受到你的痛苦。
    • 好的,我明白你在说什么了。 SVG 路径字符串中的第一组坐标(以 M 开头)指定路径中第一个点的“moveTo”位置。所以我猜测解决方案将涉及检索路径字符串,解析“M”坐标,对它们执行计算,然后重新绘制路径。这似乎会对性能产生非常负面的影响。如果我不在基地,请在这里纠正我的想法。谢谢!
    • 我想到的另一种解决方案是将元素分组到单独的纸张实例中,将纸张放在 div 中,并使用 jQuery 为 div 设置动画。麻烦,但它会工作......并避免重新绘制路径。这对性能会更好吗?
    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多