【问题标题】:Choppy text animation with RaphaelJS使用 RaphaelJS 的断断续续的文本动画
【发布时间】:2012-10-21 05:26:22
【问题描述】:

我正在尝试使用 RaphaelJS 为文本设置动画,但遇到了断断续续的动画(“颤抖”?)。我已经四处寻找有关此的其他问题,但到目前为止我只能找到特定于 jQuery 或非 SVG 的主题。如果我忽略了类似的问题,请告诉我!

本质上,我正在尝试将文本元素直观地包装在 rect 元素中,并通过动画同时翻译它们。我知道 'g' 元素,但我不想使用它,因为旧版本的 Internet Explorer 不支持它。相反,我对文本和矩形使用单独的 Raphael 动画:

var raphRect = paper.rect(
    (paperWidth/2)-rectWidth/2
    ,paperHeight-rectHeight
    ,rectWidth
    ,rectHeight            
    ,rectHeight/2
)
...
,raphText1 = paper.text(
    paperWidth/2
    ,paperHeight-(2*fontSize)
    ,'this is jumpy text?'
)
...
raphRect.animate({y : -rectHeight}, risingTime, 'linear');
raphText1.animate({y : -2*fontSize}, risingTime, 'linear');

我假设抖动是由文本元素的每个动画帧中的四舍五入引起的。有什么方法可以减轻或防止这种抖动? (减少动画时间不是一种选择......而且看起来甚至没有帮助。)

(我有一个我正在尝试做的例子here。我已经包含了两行文本和一个粗体笔划,以强调抖动。)

【问题讨论】:

  • 对此你无能为力,浏览器​​根本不做动画很流畅,你可以看看 requestAnimationFrame 看看是否有帮助,但我怀疑它。
  • 尤其是文本的子像素渲染非常糟糕。您是否尝试过使用打印而不是文本?我发现真正的路径抗锯齿非常更令人满意。
  • 通常在纯 SVG 中,您会将 text-rendering 属性设置为 geometryPrecision。例如,这将使它在 Firefox 中变得流畅。不幸的是,RaphaelJS 似乎不支持设置文本渲染。

标签: animation text svg raphael


【解决方案1】:

我遇到了同样的问题,并尝试了不同的方法来解决它。我发现很少有适合我的技巧。但他们都有一个相同的想法:你应该让文本不要那么直。

"transform" : "R 0.01"

例如,它会以小角度旋转您的文本。结果如下: jsfiddle。 我不能保证它会在您的浏览器中运行。在稳定的 Chrome 36 中它运行良好,在 beta 或 canary 中效果更差。

你也可以试试不那么直的字体jsfiddle。它适用于FF。

"font-family" : "Comic Sans MS"

其他更糟糕的尝试:

  • 增加字体大小

  • 使用粗体

  • 使用文本路径

【讨论】:

    【解决方案2】:

    这个想法实际上是从罗伯特朗森关于文本渲染属性的信息中借用的。 Raphael 确实不提供对这个功能的直接访问,但它确实为您提供了到 dom 节点的链接——所以它只是自己应用这种样式的第二步,它确实在 Firefox 中产生了更好的结果至少。

    使用 jquery:

    $(raphText1.node).attr( 'text-rendering', 'geometricPrecision' );
    $(raphText2.node).attr( 'text-rendering', 'geometricPrecision' );
    

    上演here

    【讨论】:

    • 不幸的是,我没有看到未修改的文本和设置了“文本渲染”字段的文本之间有任何视觉变化。我刚刚尝试了“文本渲染”的其他可能值,但我仍然没有看到任何变化。我在 Chrome、Firefox 3.6、Firefox 4、Firefox 9 和 Firefox 10 上尝试过,我的操作系统(如果这是相关信息)是 OS X (10.6.8)。此外,根据this link,Firefox 将“geometricPrecision”视为“optimizeLegibility”......这似乎不太好。提前致谢!
    • 文档不正确,Firefox 不会将这两个值视为相同的 SVG 文本。
    • 这很奇怪。在 16.0.1 中,视觉上的变化对我来说是相当惊人的——但我会很高兴地承认我没有进行广泛的测试。
    • 事后思考:SVG 中的字体渲染仍然依赖于操作系统的字体子系统——这可能是 OS X。你会考虑使用打印吗?我可以向您保证,结果会令人满意。
    • 我现在正在尝试打印,我应用的所有动画转换看起来都非常流畅。但是,与使用 .text() 渲染相同的文本相比,您是否知道通过 .print() 渲染文本的成本是多少?我将通过文本换行算法运行文本,该算法需要重复渲染,以便我可以测量边界框的结果尺寸。 (此外,我将无限期地使用几个不同的文本来执行此操作。)无论如何,我现在有足够的信心使用 .print() 。非常感谢!
    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2016-12-24
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2012-02-08
    相关资源
    最近更新 更多