【问题标题】:Non-smooth div animation in FirefoxFirefox 中的非平滑 div 动画
【发布时间】:2011-07-01 01:35:35
【问题描述】:

参考this fiddle。该动画在 Chrome 和 IE (v9) 上非常流畅,但在 Firefox 上却非常不稳定。整个想法是在不移动 div 本身的情况下为边框设置动画(参考this 问题)。问题是,在 Firefox 中以更流畅的方式(如 Chrome/IE 中的方式)实现相同动画的任何可能方法?

即使您只为div 的一侧设置动画也是如此,所以这并不是因为我们试图同时为每一侧设置动画。如果我们在 Firefox 中查看this fiddle,似乎动画的边距不太平滑,这似乎是问题所在。

感谢任何锻炼。

【问题讨论】:

  • 我认为您不需要 isIn 变量。 MouseEnter 和 Mouse Leave 只发生一次。只需将.stop() 放在.animate( 之前,但这并不能解决您的问题,抱歉。
  • Firefox 的哪个版本?在 Firefox 5 上对我来说它看起来相当流畅
  • 我不熟悉 jQuery,但我想每种样式都将通过 CSSStyleDeclaration 以如下方式添加:var style = elem.style; style.marginTop = '10px'; style.marginLeft='10px'; ...。它看起来不稳定的原因是 DOM 中的每次更改都会激活(部分)重排(重印)。这意味着style.marginTop = '10px'; 之后将是第一个 回流,style.marginLeft='10px'; 之后是下一个,依此类推。您必须一次将所有样式放在元素上,例如elem.setAttribute('style', 'margin-top: 10px; margin-left: 10px;...');。但这不适用于旧版 IE。
  • @蒋毅,Firefox 5(当前版本)。如果你看一下小提琴,它似乎几乎振动了一点。更明显的是this link

标签: javascript jquery


【解决方案1】:

我认为主要问题是您指定了这么多属性,并且动画函数可能认为它有 8 个不同的东西可以同时进行动画处理,而不仅仅是可以表示为的两个属性。例如,您可以这样指定,将 8 个参数组合为 2 个。我也不确定负边距:

$("#thumbdiv").bind({
            mouseenter: function(){
                $(this).animate({
                    'border-width': "35px",
                    'margin': "10px"},
                    200, 'linear');
            },
            mouseleave: function(){
                $(this).animate({
                    'border-width': "20px",
                     'margin': "0px"},
                    200, 'linear');
            }
        });

【讨论】:

  • 你现在不能在 JQuery 中为简写动画,这就是为什么有 8 个不同的属性被动画
  • 你确定不能只使用一个值的border-width和margin吗?虽然它们可以采用多个值,但它们只能使用一个应该以这种方式设置动画的值。
  • 在 YUI 中,我们可以使用任何带有单个参数的动画样式。这是因为 YUI 库只接受您给它的任何单个值并为该单个值设置动画。是否是或者相同的样式属性是否可以与多个参数一起使用都没有关系。只要我们只使用一个参数,它就可以工作。我在 jQuery 代码中看不出有什么不一样的原因。
  • 如果你看 [这里] (api.jquery.com/animate) 它会在某个时候告诉你 Shorthand CSS properties (e.g. margin, background, border) are not supported. For example, if you want to retrieve the rendered margin, use: $(elem).css('marginTop') and $(elem).css('marginRight'), and so on.
  • 如果你只使用一个值而不是 2、3 或 4 个值,我很确定 jQuery 可以使用像 margin 这样的简写名称。例如:“边距:10px”。那是因为这只是任何旧的 CSS 属性,而 jQuery 不会对这些属性进行特殊处理。它只是动画你给他们的任何数字应该可以正常工作。有一些属性以特殊方式处理,但在查看 jquery 源时,margin 似乎不是其中之一。你可以在这里看到它的实际效果(例如它的工作原理):jsfiddle.net/jfriend00/Uwum2
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 2011-06-16
  • 2011-08-20
  • 2023-03-23
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多