Vue动画与过渡


使用CSS keyframes实现动画

animation: [name] [duration] [timing-function] [delay] [iteration-count] [direction] [fill-mode]

  • name:用于给@keyframes指定动画名称

  • duration:用于标记一个动画完成周期所需时间,非必填,默认0s

  • timing-function:用于描述一个动画数值变化方式,非必填,默认ease

    • linear:表示值变化均匀,匀速播放动画。

    • ease:默认参数。表示值变化以低速率开始,逐渐加快,直到结束前速率降低。

    • ease-in:表示值变化以低速率开始,平均速率过渡,结尾戛然而止。

    • ease-out:表示值变化以平均速率开始,以低速率缓慢结尾。

    • ease-in-out:表示值变化以低速率开始和结尾。

    • steps(int,start|end):表示将值区间按一定数量隔开,每段时间间隔中值保持不变。第一个参数为整型,第二个参数为字符串。

      • int:间隔数量,数量越小效果越明显。

      • start|end:字符串参数,start为从值区间头部开始计算,end为从值区间尾部开始计算。

      • 举例:值区间[0,99],参数steps(4,start|end),start或end。

        将0~99分为四段,分别为0~24,25~49,50~74,75~99。

        首先值以匀速从0开始向99变化。当为start时,值一旦在0~24开始变化,开始于此段的头部值0,则立刻输出该段结尾值24,等待时间推动值变化进入下一段。

        当为end时,值一旦在0~24开始变化,由于未触发此段的尾部值24,故一直保持输出该段的头部值0,等待时间推动值变化进入下一段。

    • cubic-bezier(p1x,p1y,p2x,p2y):表示值变化v-t图遵循贝塞尔曲线图形。

      • 在二维直角坐标系中,首先有P0(p0x,p0y),此时p0x=0,p0y=0,即原点,此点固定不变。其次有P3(p3x,p3y),此时p3x=1,p3y=1,此点固定不变。
      • 最后有两自由点P1(p1x,p1y)、P2(p2x,p2y),由P0P1组成一条贝塞尔辅助线,由P2P3组成另一条贝塞尔辅助线,在这两条辅助线的作用下生成一条贝塞尔曲线,此曲线即值变化速度曲线v-t图,其中负值代表方向。
  • delay:用于标记一个动画完成周期所需时间,非必填,默认0s

  • iteration-count:用于描述一个动画循环次数,非必填,默认0s,不设置则不使用循环播放效果

    • 整型:表示播放次数。
    • infinite:字符串,表示无限循环播放。
  • direction:用于设置是否循环往复播放动画,非必填,默认normal

    • normal:默认参数。动画正常播放,不进行循环往复操作。
    • reverse:动画反向播放。
    • alternate:动画在奇数次正向播放,在偶数次反向播放。
    • alternate-reverse:动画在偶数次正向播放,在奇数次反向播放。
    • initial:动画重新设置为默认值。
    • inherit:动画设置为父元素属性。
  • fill-mode:用于在动画不播放时(处于延时或完成的状态)设置动画的位置,非必填,样式可以分为在animation外部的初始样式,以及在keyframes中定义的动画样式。

    • none:默认参数。在动画不播放时不对动画产生任何作用。
    • forwards:在动画结束时应用动画样式效果,在动画延时中应用初始样式效果。
    • backwards:在动画结束时应用初始样式效果,在动画延时中应用动画样式效果。
    • both:在动画结束时应用动画样式效果,在动画延时中应用动画样式效果。
    • initial:动画重新设置为默认值。
    • inherit:动画设置为父元素属性。

示例:

<template>
  <main>
    <div class="container">
      <div class="box"></div>
      <input type="text" v-model="duration" />
    </div>
  </main>
</template>

<script setup>
import { ref } from "vue";

const duration = ref(10);
</script>

<style>
.box {
  width: 100px;
  height: 100px;
  background: linear-gradient(
    45deg,
    hsl(240deg, 60%, 50%),
    hsl(300deg, 90%, 50%)
  );
  padding: 0.5em 1.4em;
  border-radius: 4px;
  color: white;

  
  /* animation: rotate 10s linear infinite; */
  animation: rotate v-bind(duration + "s") linear infinite;
}

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}
</style>

使用CSS Transition实现动画

Transition强调过渡,即一个元素从一个状态进入另一个状态的过程;而keyframes强调动画的运动轨迹,可设置中间状态改变动画轨迹。

transform参数:

  1. translate ( n px ):

    **一个值:**transform:translate(100px),表示水平方向移动的位移,等同于translateX(100px)

    translateX(x):沿 X 轴位移

    translateY(y):沿 Y 轴位移

    translateZ(z):沿 Z 轴位移

    两个值: transform:translate(100px, 200px),第一个表示水平方向移动的位移,第二个表示垂直方向移动的位移

    translate(x,y) :沿 X Y 轴位移

    **三个值:**translate3d(10px,20px,10px),表示3D三个方向移动的位移,顺序为X,Y,Z

  2. rotate ( n deg ):

    以角度(deg)为单位,正数是顺时针旋转,负数是逆时针旋转

    rotate():2D旋转

    rotateX():沿着X轴3D旋转

    rotateY():沿着Y轴3D旋转

    rotateZ():沿着Z轴3D旋转.要在其父级配合transform-style: preserve-3d;使用

    rotate3D(x,y,z,n deg): 3D旋转,接受四个参数,x,y,z介于0-1之间,n是旋转的度数。元素围绕着xyz在空间中确定的唯一坐标点和原点之间的连线旋转指定的角度。

  3. scale ( n ):

    **一个值:**transform: scale(1) ,表示水平跟垂直方向同时放大1倍

    **两个值:**transform: scale(1,2),第一个参数表示水平方向的缩放比例,第二个参数表示垂直方向的缩放比例,等同于scaleX (1)和 scaleY(2)

    **三个值:**scale3d(0.5,0.3,0.4),表示3D三个方向缩放的比例,顺序为X,Y,Z轴

    数值为负时为缩小

  4. skew ( n deg ):

    **一个值:**transform:skew(10deg),表示水平方向的倾斜角度,等同于skewX(10deg)

    skewX:表示水平方向的倾斜角度

    skewY:表示垂直方向的倾斜角度

    **两个值:**transform:skew(10deg,20deg),第一个参数表示水平方向的倾斜角度,第二个参数表示垂直方向的倾斜角度

  5. transform-origin:

值得注意的是:在进行以上的变形操作时,默认都是以元素的中心为基点.

有两个参数:第一个表示距离元素左上角水平方向的距离,第二个表示距离元素左上角垂直方向的距离。

第一个参数可以设置为left、center、right,第二个参数可以设置为top、center、bottom。

transition参数:

  1. transition-property:定过渡或动态模拟的css属性,也就是指定究竟是哪个属性要执行动画效果。
    • none:没有属性会获得过渡效果。
    • all:所有属性都将获得过渡效果。
    • property:定义应用过渡效果的 CSS 属性名称列表,列表以逗号分隔。
  2. transition-duration:指定完成过渡所需的时间,单位是秒或毫秒。参数同keyframes。
  3. transition-timing-function:指定过渡函数。参数同keyframes。
  4. transition-delay:开始执行动画的延迟时间,单位是秒或毫秒。参数同keyframes。

示例:

.box {
  width: 100px;
  height: 100px;
  background: linear-gradient(
    45deg,
    hsl(240deg, 60%, 50%),
    hsl(300deg, 90%, 50%)
  );
  padding: 0.5em 1.4em;
  border-radius: 4px;
  color: white;
  transition: all 0.5s ease-in-out;
}

.box:hover {
  transform: scale(1.25) skewY(-20deg) rotateY(20deg);
}

文章作者: QT-7274
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 QT-7274 !
评论
  目录