Расширение кругов с помощью CSS3-анимации - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь сделать так, чтобы при загрузке страницы появлялись круги, что нормально, но мне нужно, чтобы они росли наружу, такие маленькие или большие от центра, а не от верхнего левого угла:

Вы можете видетьчто у меня сейчас есть: http://thomasbritton.co.uk/projects/ebrd/

В идеале, хочу, чтобы это было сделано в CSS, но можно использовать JS, если это проще / стабильнее.

Есть идеи?

Вот мой CSS также для анимации:

.circle a {
  border-radius: 150px;
  color: #fff;
  height: 0;
  position: absolute;
  text-decoration: none;
  width: 0;
}

.circle a.grow {
  -webkit-animation-name: grow;
  -webkit-animation-duration: 2.2s;
  -webkit-animation-timing-function: ease;
  -webkit-animation-iteration-count: 1;
  -webkit-animation-direction: normal;
  -webkit-animation-delay: 0;
  -webkit-animation-play-state: running;
  -webkit-animation-fill-mode: forwards;

  -moz-animation-name: grow;
  -moz-animation-duration: 2.2s;
  -moz-animation-timing-function: ease;
  -moz-animation-iteration-count: 1;    
  -moz-animation-direction: normal;
  -moz-animation-delay: 0;
  -moz-animation-play-state: running;
  -moz-animation-fill-mode: forwards;

  animation-name: grow;
  animation-duration: 2.2s;
  animation-timing-function: ease;
  animation-iteration-count: 1; 
  animation-direction: normal;
  animation-delay: 0;
  animation-play-state: running;
  animation-fill-mode: forwards;
}

@-webkit-keyframes grow {
  0% { -moz-transform: scale(0); }
  100% { -moz-transform: scale(1); }
}

@-moz-keyframes grow {
  0% { -moz-transform: scale(0); }
  100% { -moz-transform: scale(1); height: 168px; width: 168px; }
}

@keyframes grow {
  0% { -moz-transform: scale(0); }
  100% { -moz-transform: scale(1); }
}

Ответы [ 5 ]

5 голосов
/ 17 февраля 2012

Вот примерный пример того, что вам нужно сделать: jsfiddle.net / UxtJV / .Он использует немного JS, чтобы добавить класс для анимации круга.Его свойства width, height, top и left анимированы, и ему присвоено position: relative.

div.circle {
    position: relative;

    width: 0px;
    height: 0px;
    top: 50px;
    left: 50px;

    -webkit-transition-duration: 2s;
    -webkit-transition-property: all;
    -webkit-transition-timing-function: ease-in-out;

    text-align: center;
    background: red;
    color: white;
    border-radius: 100%;
    padding: 20px;
    overflow: hidden;
}

div.circle.open {
    top: 0px;
    left: 0px;
    width: 100px;
    height: 100px;
}​
2 голосов
/ 17 февраля 2012

Для этого ваша анимация должна включать:

  1. увеличение ширины и высоты.
  2. увеличение сверху и слева.

Этонемного работы, но она будет делать именно то, что вы просили.

1 голос
/ 18 ноября 2014

Вам не нужно использовать Jquery или Javascript для вашего случая, вы можете добиться этого с помощью чистого CSS.

Не используйте свойство position в ваших анимированных элементах div.Это вызовет у вас медленную анимацию.Вместо этого используйте преобразование для анимации.

<div class="circle__wrapper">
  <a class="circle" href="#"></a>
</div>

/* circle__wrapper will help you to position the div in the center of the page */
.circle__wrapper { 
  position: fixed; 
  top: 50%; 
  left: 50%; 
  -webkit-transform: translate(-50%, -50%); 
  transform: translate(-50%, -50%); 
}

.circle__wrapper a.circle { 
  display:block; 
  height: 168px; 
  width: 168px; 
  background-color: #fea733; 
  -webkit-border-radius: 50%; 
  -moz-border-radius: 50%; 
  border-radius: 50%; 
  -webkit-animation: growUp 2s 1.5s; /* You can remove 1.5s if you don't want delay */
  -moz-animation: growUp 2s 1.5s; 
  -ms-animation: growUp 2s 1.5s; 
  -o-animation: growUp 2s 1.5s; 
  animation: growUp 2s 1.5s; 
}


@-webkit-keyframes growUp {   
  0%  { -webkit-transform: scale(0); }
  100% { -webkit-transform: scale(1); }
}

@-moz-keyframes growUp {
  0%  { -moz-transform: scale(0); }
  100% { -moz-transform: scale(1); }
}

@-o-keyframes growUp {
  0%  { -o-transform: scale(0); }
  100% { -o-transform: scale(1); }
}

@-ms-keyframes growUp {
  0%  { -ms-transform: scale(0); }
  100% { -ms-transform: scale(1); }
}

@keyframes growUp {
  0%  { transform: scale(0); }
  100% { transform: scale(1); }
}

Надеюсь, это поможет.

1 голос
/ 14 ноября 2013

На всякий случай, если кто-то ищет рабочее решение jQuery, вот оно ...

HTML

<div class=circle1></div>

CSS

.circle1 {
    position:absolute; top:50px; left:50px;
    width: 0px; height: 0px;
    border:1px solid red;
    padding:20px;
    border-radius:50%;
}

JS

$(".circle1").mouseover(function() {
      $(this).animate({top:"0", left:"0", width:"100px", height:"100px", opacity: 0}, 200);  
}).mouseout(function() {
      $(this).animate({top:"50px", left:"50px", width:"0", height:"0", opacity: 1}, 200);
});

А вот демоверсия - http://jsbin.com/esiLULEb/1/

1 голос
/ 17 февраля 2012

Вы можете попробовать объединить анимацию со свойством перевода.

Это может быть другой вариант:

transform-origin: top right; /* 50% 50% or whatever*/

как опубликовано здесь ...

...