css - 使用 Sprite 在双背景上分离 CSS 动画

标签 css animation sprite

我有一个带有两个背景图像的按钮,并使用 background-blend-mode: overlay; 将它们混合在一起。

图 1:包含烟雾的半透明图像

enter image description here

图片 2:包含 2 种背景状态的 Sprite

enter image description here

当鼠标悬停在按钮上时,动画开始从右向左无限滚动 Image 1,给人一种烟雾穿过按钮的错觉。

<a href="#"></a>

a {
  width: 300px;
  height: 68px;

  display: block;


  background: url("http://i.imgur.com/a52FaTn.png"), url("http://i.imgur.com/pCxkS4J.jpg");
  background-repeat: repeat, no-repeat;   
  background-blend-mode: overlay;

    animation: 16s linear 0s normal none infinite paused;

  animation-name: my-animation;
}

a:hover {
 animation-play-state: running; 
}

@-webkit-keyframes my-animation { from{background-position: 0px 0px, left 0px;} to{background-position: -590px 0px, left 0px;} }
@keyframes my-animation { from{background-position: 0px 0px, left 0px;} to{background-position: -590px 0px, left 0px;} }

查看实际效果:https://jsfiddle.net/663c2tj4/1/

到目前为止一切顺利。但是现在我想让 image 2 的背景位置立即切换到右边(通常你会用常规的背景位置来做到这一点)。

a {
  width: 300px;
  height: 68px;

  display: block;

  background: url("http://i.imgur.com/a52FaTn.png"), url("http://i.imgur.com/pCxkS4J.jpg");
  background-repeat: repeat, no-repeat;   
  background-blend-mode: overlay;

  animation: 16s linear 0s normal none infinite paused, none ;

  animation-name: my-animation;
}

a:hover {
  animation-play-state: running;   
  background-position: 0 0, right 0; // Gets overwritten by animation
}

@-webkit-keyframes my-animation { from{background-position: 0px 0px, left 0px;} to{background-position: -590px 0px, right 0px;} }
@keyframes my-animation { from{background-position: 0px 0px, left 0px;} to{background-position: -590px 0px, right 0px;} }

查看实际效果:https://jsfiddle.net/8b8fku0s/2/

如您所见,它会将 Image 2 缓慢移动到右侧,而不是像我希望的那样立即移动。只使用一张图片是不可能的吗?

更新:我最终使用了不同的技术来获得我想要的结果。我使用了带有白色背景的 background-blend-mode: luminosity; 来降低图像的饱和度。

参见示例:https://jsfiddle.net/8b8fku0s/5/

最佳答案

使用中间关键帧让第二个背景瞬间移动

@keyframes my-animation { 
  from {background-position: 0px 0px, 0% 0px;} 
  49.99%{background-position: -295px 0px, 0% 0px;} 
  50%  {background-position: -295px 0px, right 0px;} 
  to   {background-position: -590px 0px, right 0px;} 
}

fiddle

但是如果你想让第二个背景在整个动画时间都在右边,那就更容易了。只需在起始和终止关键帧中设置相同的值即可:

@keyframes my-animation { 
  from {background-position:    0px 0px, right 0px;} 
  to   {background-position: -590px 0px, right 0px;} 
}

关于css - 使用 Sprite 在双背景上分离 CSS 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026368/

相关文章:

jQuery 隐藏 + CSS 鼠标悬停问题

javascript - 如何从网页中打开一个小方框进行选择

C++/SFML 显示小故障,通过鼠标单击更改 Sprite 成员

java - 如何将 Sprite 的坐标附加到其中心? LibGDX

html - 水平对齐 div,在窗口调整大小时停止 float

html - 背景图像位置固定的 div 容器

javascript - 撤消 jQuery 函数

HTML 动画

javascript - Swift:如何将粒子网络 JS 动画转换为 iOS

html - 图像 Sprite 正确的间距