Свойство jQuery animate css border-radius (webkit, mozilla) - PullRequest
30 голосов
/ 18 июня 2009

Есть ли в jQuery способ анимировать свойство css3 border-radius , доступное в браузерах Webkit и Mozilla?

Я не нашел плагин, который будет это делать.

-webkit-border-radius

-moz-border-radius

Ответы [ 3 ]

52 голосов
/ 18 июня 2009

Я изначально ожидал, что что-то вроде ...

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

... будет работать. Но я ошибся: Webkit позволяет вам установить значение для всех четырех углов с помощью borderRadius, но не позволит вам прочитать его обратно - поэтому с кодом выше анимация всегда будет начинаться с 0 вместо 10. IE имеет ту же проблему. 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); 

Это начинает становиться довольно сумасшедшим, хотя; Я бы избежал этого, если это возможно.

3 голосов
/ 13 января 2011

Используйте cssHooks.

Это поможет вам:

http://www.webmuse.co.uk/articles/border_radius_csshook_with_internet_explorer_support/

Ссылки на cssHooks:

https://github.com/brandonaaron/jquery-cssHooks

Удачи!

2 голосов
/ 13 января 2011

Просто совет, мы можем использовать функцию для определения CSS-префикса браузера Вот пример кода .. http://jsfiddle.net/molokoloco/f6Z3D/

...