在CSS中旋转地球仪

73 html css html5 css3 css-animations

我在CSS中创建旋转地球效果.我用CSS创建了globe:

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; }
}
Run Code Online (Sandbox Code Playgroud)
<div id="earth"></div>
Run Code Online (Sandbox Code Playgroud)

但它停止然后图像重置并重新开始.我想让它顺利移动而不会抽搐.非常感谢你!

The*_*ick 91

background-position: 500px 0px;与610px取代500像素,这是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;
  }
}
Run Code Online (Sandbox Code Playgroud)
<div id="earth"></div>
Run Code Online (Sandbox Code Playgroud)

  • 好的,现在期待大量的upvotes :) (9认同)
  • upvoted,这是一个简单的问题,错过了一个位置项目,如果你downvoted请说明为什么这样的回答者可以改善答案. (5认同)
  • 我不是故意只是一个评论家,但是,地球是不是应该一直朝着同一个方向旋转?在此答案中,旋转停止并向后开始,然后停止并向前重新开始 (2认同)

Mar*_*ijn 46

您的代码中的问题是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; }
}
Run Code Online (Sandbox Code Playgroud)

这是片段,但是100%而不是像素值:
*请注意:动画仍然跳跃,但我无法测试新代码,因为图像不再存在.逻辑工作,但这种实现似乎没有.以下代码仅是带有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; }
}
Run Code Online (Sandbox Code Playgroud)
<div id="earth"></div>
Run Code Online (Sandbox Code Playgroud)

  • 这使我的浏览器(Safari)不断从中国跳到墨西哥. (11认同)
  • 对我来说,嵌入式和全页式都在跳跃.但是为什么我的Firefox工作?这是奇怪的. (6认同)
  • 实际上,这就是它的目的.(1) (4认同)
  • 嘿它甚至没有在FF 34.0.5(Windows 8)上工作!您的解决方案仅适用于GC. (4认同)
  • 这不适用于IE**#Martijn** (3认同)
  • 它也为我从中国跳到墨西哥.RHEL 6上的FF 31.2.0 (2认同)