属性的顺序与 jQuery 动画有关吗?

Posted

技术标签:

【中文标题】属性的顺序与 jQuery 动画有关吗?【英文标题】:Order of properties matter with jQuery animate? 【发布时间】:2011-08-26 07:12:54 【问题描述】:

在刚刚花了太多时间调试为什么我的 jQuery animate() 调用停止正常工作之后,我意识到我的问题是 animate() 调用中的属性必须按特定顺序排列。所以以下将正常工作:

$('div.example').animate(left: 50, top: 100, opacity: 1);

将会发生的是div.example 将淡入(如果还没有)并且将仅出现在左侧:50,顶部:100 的位置,它不会动画。要使其按预期工作,您必须重新排序:

$('div.example').animate(opacity: 1, left: 50, top: 100);

我在 FF4 和 Chrome 中对此进行了测试。这让我感到惊讶,因为我什至不知道 javascript 保证了对象中属性的顺序,而 jQuery 在他们的文档中没有提到这个要求。所以我的问题基本上是,我做错了什么吗?这是预期的吗?是否有关于正确顺序的文件?这在所有浏览器中都能正常工作吗?

我也在使用 jQuery UI。我知道这增强了标准动画方法以允许动画颜色等。这可能是问题吗?

【问题讨论】:

太傻了,json对象不管它们的顺序是什么,除非它是一个css问题,因为jquery会在for循环中读取它们,或者直接访问option.left,等等在。顺序在这里不重要, 这是一个非常奇怪的行为。正如您所提到的,没有订单保证,并且无论是否设置了opacity,问题都不会扩大。引起我的注意.. 这确实很奇怪。确认我收到相同的行为jsfiddle.net/garreh/Tpb5z 【参考方案1】:

这是一个 jQuery 错误:cannot animate position and opacity at same time,但在 1.6 中已修复。1

同时,您可以通过在末尾添加“px”来修复它:

$('div.example').animate(top: '100px', left: '50px', opacity: 1);

【讨论】:

我正在使用最新的(自动通过谷歌的 CDN)。嗯,看起来根据谷歌最新的是v1.6.0。我想 1.6.1 一定是刚出来的。好吧,至少有一个特定订单的临时修复是有效的。感谢您的解释和替代解决方法。【参考方案2】:

您的属性 lefttop 是否在 css 中较早声明?某些浏览器(如果我没记错的话是 webkit)在动画未声明的属性时遇到问题。尝试将 lefttop 设置为 0 或其他一些值,看看是否有效。

【讨论】:

以上是关于属性的顺序与 jQuery 动画有关吗?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery样式与动画

jQuery在更改CSS高度属性时添加动画

CSS 动画与 JQuery 动画

jQuery 动画“文本阴影”css 属性

jQuery - 动画高度自动

试图让 JQuery 动画的时间正确