CSS3缩放和移动img上的动画效果

Posted

技术标签:

【中文标题】CSS3缩放和移动img上的动画效果【英文标题】:CSS3 zoom and move animation effect on img 【发布时间】:2016-04-13 05:44:22 【问题描述】:

我正在尝试使 CSS3 动画像 this site 中的滑块一样。

我尝试使用以下 CSS:

.animate-in
  left: -20%;
  opacity: 1;
  top: 0;
  z-index: 1;
  -webkit-transform: scale(1.2);
  -moz-transform: scale(1.2);
  -ms-transform: scale(1.2);
  -o-transform: scale(1.2);
  transform: scale(1.2);
  -webkit-transition-property: left, -webkit-transform, opacity;
  -moz-transition-property: left, transform, opacity;
  -ms-transition-property: left, transform, opacity;
  -o-transition-property: left, transform, opacity;
  transition-property: left, transform, opacity;
  -webkit-transition-duration: 10s, 15s, 2s;
  -moz-transition-duration: 10s, 15s, 2s;
  -ms-transition-duration: 10s, 15s, 2s;
  -o-transition-duration: 10s, 15s, 2s;
  transition-duration: 10s, 15s, 2s;
  -webkit-transition-timing-function: linear;
  -moz-transition-timing-function: linear;
  -ms-transition-timing-function: linear;
  -o-transition-timing-function: linear;
  transition-timing-function: linear;
  -webkit-transition-delay: 1s;
  -moz-transition-delay: 1s;
  -ms-transition-delay: 1s;
  -o-transition-delay: 1s;
  transition-delay: 1s;
 

但是这个 CSS 只产生了缩放效果,我需要像上面的例子一样让图片从左右消失的效果。

【问题讨论】:

【参考方案1】:

实现所需缩放 + 淡入淡出和从左侧移动动画的一种方法是确保容器比所需大小大 n 像素,然后添加 translateX(npx) 也作为 transform 堆栈的一部分。

注意:

我使用动画而不是过渡,因为动画是自动触发的,而过渡仅在状态更改时触发。

另一种方法是为background-sizebackground-position 设置动画,但通常认为使用transform 的动画在性能方面问题较少。

.anim 
  position: absolute;
  height: 100%;
  width: calc(100% + 100px);
  background-image: url(https://picsum.photos/1000/500?random=1);
  animation: zoom-move 15s linear infinite;

@keyframes zoom-move 
  0% 
    transform: scale(1) translateX(-100px);
    opacity: 0.25;
  
  13.33% 
    opacity: 1;
    /* make opacity change complete in 2s */
  
  66.66% 
    transform: scale(1.13) translateX(0px);
    opacity: 1;
  
  100% 
    transform: scale(1.2) translateX(0px);
    opacity: 1;
  

body 
  background-color: black;
  overflow: hidden;
  padding: 0;
  margin: 0;
<div class='anim'></div>

或者,实现它的另一种方法是使用transform-origintransform(不添加任何translate)。

.anim 
  position: absolute;
  height: 100%;
  width: calc(100% + 100px);
  left: -100px;
  background-image: url(https://picsum.photos/1000/500?random=1);
  animation: zoom-move 15s linear infinite;

@keyframes zoom-move 
  0% 
    transform: scale(1);
    transform-origin: -100px 50%;
    opacity: 0.25;
  
  13.33% 
    opacity: 1;
  
  100% 
    transform: scale(1.2);
    transform-origin: -100px 50%;
    opacity: 1;
  

body 
  background-color: black;
  overflow: hidden;
  padding: 0;
  margin: 0;
<div class='anim'></div>

【讨论】:

以上是关于CSS3缩放和移动img上的动画效果的主要内容,如果未能解决你的问题,请参考以下文章

CSS3帧动画

css3圆环旋转效果动画怎么做

动画1

CSS3中的动画效果transform:translateZ(),在Z轴上移动xx距离

图片轮转切换效果

CSS3滤镜效果可在动画中使用