Вращающийся глобус в CSS



Я создаю эффект вращающейся Земли в CSS. Я создал глобус в CSS:






body {
background-color: #111;
}

#earth {
width: 300px;
height: 300px;
background: url(http://www.noirextreme.com/digital/Earth-Color4096.jpg);
border-radius: 50%;
background-size: 610px;
box-shadow: inset 8px 36px 80px 36px rgb(0, 0, 0),
inset -6px 0 12px 4px rgba(255, 255, 255, 0.3);
animation-name: rotate;
animation-duration: 12s;
animation-iteration-count: infinite;
animation-timing-function: linear;
-webkit-animation-name: rotate;
-webkit-animation-duration: 12s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
}

@keyframes rotate {
from { background-position: 0px 0px; }
to { background-position: 500px 0px; }
}
@-webkit-keyframes rotate {
from { background-position: 0px 0px; }
to { background-position: 500px 0px; }
}

<div id="earth"></div>





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

758   2  

2 ответов:

на background-position: 500px 0px; заменить 500px на 610px, который является background-size

body {
  background-color: #111;
}
#earth {
  width: 300px;
  height: 300px;
  background: url(http://www.noirextreme.com/digital/Earth-Color4096.jpg);
  border-radius: 50%;
  background-size: 610px;
  box-shadow: inset 8px 36px 80px 36px rgb(0, 0, 0), inset -6px 0 12px 4px rgba(255, 255, 255, 0.3);
  animation-name: rotate;
  animation-duration: 12s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  -webkit-animation-name: rotate;
 -webkit-animation-duration: 12s;
 -webkit-animation-iteration-count: infinite;
 -webkit-animation-timing-function: linear;
}
@keyframes rotate {
  from {
    background-position: 0px 0px;
  }
  to {
    background-position: 610px 0px;
  }
}
@-webkit-keyframes rotate {
  from {
    background-position: 0px 0px;
  }
  to {
    background-position: 610px 0px;
  }
}
<div id="earth"></div>

проблема в вашем коде заключается в том, что imagesize (610px) и смещение анимации ( 500px) отличаются и при сбросе анимации он прыгает (110px).

простой трюк, который я хотел бы использовать вместо определения смещения анимации в пикселях:определите его в процентах.
Вместо того, чтобы сказать ему двигаться 610px, я говорю ему двигаться 100%.

бонус метода 100% заключается в том, что если вы можете изменить изображение, вам не нужно изменять все жестко закодированные значения в вашем CSS, который, IMO, должен быть предпочтительным методом.

обратите внимание: кажется, что перемещение от 0 до -100% создает прыжок. Поскольку нам нужно вращение, чтобы идти в правильном направлении, я попытался начать 100% и переместить его в 0, но в этот момент изображение больше не существует.

@keyframes rotate {
   from { background-position:  100%  0; }
   to {   background-position:    0   0; }
}

вот фрагмент, но со 100% вместо pixelvalue:
* Пожалуйста, обратите внимание: анимация все еще прыгал, но я не могу проверить новый код, потому что изображение больше не существует. Логика работает, но эта реализация, кажется, нет. Следующий код - это только демонстрация с кодом TS.

body {
  background-color: #111;
}
#earth {
  width: 300px;
  height: 300px;
  background: url(http://www.noirextreme.com/digital/Earth-Color4096.jpg);
  border-radius: 50%;
  background-size: 610px;
  box-shadow: inset 8px 36px 80px 36px rgb(0, 0, 0), inset -6px 0 12px 4px rgba(255, 255, 255, 0.3);
  animation-name: rotate;
  animation-duration: 12s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
}
@keyframes rotate {
   from { background-position:  100%  0; }
   to {   background-position:    0   0; }
}
<div id="earth"></div>

Comments

    Ничего не найдено.