jQuery动画CSS边框半径属性(Webkit,Mozilla)

30

jQuery 中是否有一种方法可以动画化 Webkit 和 Mozilla 浏览器中可用的 CSS3 border-radius 属性?

我没有找到一个可以做到这点的插件。

-webkit-border-radius

-moz-border-radius
3个回答

52

我最初的想法是,像这样做些什么...

$("selector")
  .css({borderRadius: 10});
  .animate({borderRadius: 30}, 900);

我本以为设置borderRadius值对所有四个角落都有用,但事实证明,这种方式在Webkit和IE上无法读取回来。所以使用以上代码时,动画始终会从0开始而不是10。幸运的是,Firefox可以成功读取回来,因此在Firefox上一切正常。

嗯... border-radius在不同浏览器上的实现历史存在差异。

幸运的是,有一个解决方法:只需单独指定每个角的半径即可:

$("selector")
  .css({
    borderTopLeftRadius: 10, 
    borderTopRightRadius: 10, 
    borderBottomLeftRadius: 10, 
    borderBottomRightRadius: 10 })
  .animate({
    borderTopLeftRadius: 30, 
    borderTopRightRadius: 30, 
    borderBottomLeftRadius: 30, 
    borderBottomRightRadius: 30}, 900);

请注意,如果您希望与旧浏览器保持兼容性,可以全力以赴并使用旧的浏览器前缀名称:

$("selector")
  .css({
    borderTopLeftRadius: 10, 
    borderTopRightRadius: 10, 
    borderBottomLeftRadius: 10, 
    borderBottomRightRadius: 10,
    WebkitBorderTopLeftRadius: 10, 
    WebkitBorderTopRightRadius: 10, 
    WebkitBorderBottomLeftRadius: 10, 
    WebkitBorderBottomRightRadius: 10, 
    MozBorderRadius: 10 
  })
  .animate({
    borderTopLeftRadius: 30, 
    borderTopRightRadius: 30, 
    borderBottomLeftRadius: 30, 
    borderBottomRightRadius: 30,
    WebkitBorderTopLeftRadius: 30, 
    WebkitBorderTopRightRadius: 30, 
    WebkitBorderBottomLeftRadius: 30, 
    WebkitBorderBottomRightRadius: 30, 
    MozBorderRadius: 30 
  }, 900); 

不过,这开始变得相当疯狂了;如果可能的话,我会避免使用它。


1
嗯,有点这个意思。到目前为止,如果样式表中设置了任何半径,那么角落将会被强制变成正方形,然后从那里动画到30(使用您的示例)。它似乎想要从0到给定的任何值。我在Safari和Firefox 3.5 beta中得到相同的结果。 - user113716
1
@patrick:是的,我找到了一个解决方法。无法在Safari中测试,但在Chrome中可以正常工作(它展示了相同的错误,所以我认为这是一个通用的Webkit问题)。我已经更新了答案,请试一试... - Shog9
这段代码在我的Firefox 5上没有起作用,使用的是jQuery 1.5。我将所有的"BorderRadius"改成了"borderRadius",然后它就可以工作了。 - Blowsie
谢谢,@Blowsie - 我应该猜到一旦尘埃落定,它会变成小写字母。我已经更新了答案,以指示当前浏览器上此技术的状态。 - Shog9
这在2013年现在改变了吗? - Daniel W.
显示剩余3条评论


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接