0-11 Vue 动画原理(transition过渡、animation、velocity、多元素动画)

1.轮播组件 slides

  • 淘宝首页的广告位:轮播
  • 轮播最难的点:最后一个到第一变化
    在这里插入图片描述

Vue动画方式1 - CSS transition

1.做一个简单的动画需要哪几布

  1. 给元素外添加一个transition标签
    <transition name="fade">标签元素</transition>
  2. 在CSS里面写一个以fade开头的一系列的类
    .fade-enter-active
  3. 需要给变化元素初始值
    (有些属性有默认值就不需要初始值)
  4. 添加一个事件监听,变化元素的属性
    指令的过程被transition延长了

2.过渡的类名

  • 元素诞生或元素消亡都有一个过程,而我们通过transition可以控制这个过渡过程
  • .fade-enter{}:淡入的第一帧,也就是初始值
  • .fade-enter-active{}:正在进入,这个就定义了transition有多少秒
  • .fade-leave-active{}:淡出的过程
.fade-enter-active,.fade-leave-active {
  /* 持续时间*/
  transition: all .5s;
}
  • .fade-enter-to{}:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。
    一般是不需要这个,因为动画的结束状态就是该元素p对应的状态

3.过渡原理

  • p元素一开始没有出现在DOM中
  • 首先将它插到DOM中,变成一个实际存在的元素
  • 然后添加一个 .fade-enter.fade-enter-active类在p身上
  • 紧接着第二帧 .fade-enter就被移除,然后再添加一个 .fade-enter-to
  • 一直到结束: .fade-enter-to.fade-enter-active都被移除
  • p元素结束时状态为p在CSS中的值

Vue动画方式2- CSS animation

  • CSS动画
  • 区别
    在动画中 v-enter 类名在节点插入 DOM 后不会立即删除,而是在 animationend 事件触发时删除。

1.动画

  • 还是用transition标签
  • 直接给淡入过程添加一个动画
    淡入的开始和结束状态都不写,只写怎么过渡
    淡出的动画不用写,只需要reverse即可
  • 在100%的时候最好是回到初始状态
    不然会出现一个卡壳的状态,动画不连贯
.bounce-enter-active {
  animation: bounce-in .5s;
}
.bounce-leave-active {
  animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
  • 使用animation更简单,但要做到两件事
    1.一定要写:enter-active/leave-active正在淡入和正在淡出的animation
    2.animation要保证最终状态就是正常状态
  • 可以结合一些第三方库
    因为animation很难写,很那把动画做得很好看,可以直接使用别人的动画
    在BootCDN中搜索animate.css
    复制标签到head中
    在这里插入图片描述
  • transition标签
    1.其中的enter-active-classleave-active-class后面的内容可以修改
    2.如:enter-active-class="animated shake"
    3.Animate.css动画文档
  <transition
    enter-active-class="animated tada"
    leave-active-class="animated bounceOutRight"
  >
    <p v-if="show">hello</p>
  </transition>

Vue动画方式3 - JS 操作动画

  • 可以使用JS钩子来判断当前动画处于哪个阶段
  • velocityBootCDN文档
    一个非常著名的用JS做动画的库
  • JS可以精确控制动画的状态

1.操作

  • 使用velocity对元素进行一系列的操作
    操作都放在new Vue的methods里面,结束的时候要调用done
  • 是由自己完全控制的过程
    1.beforeEnter、enter、leave
    2.传入参数:el(操作元素)、done(结束的时候)
  methods: {
    beforeEnter: function (el) {
      el.style.opacity = 0
      el.style.transformOrigin = 'left'
    },
    enter: function (el, done) {
      Velocity(el, { opacity: 1, fontSize: '1.4em' }, { duration: 300 })
      Velocity(el, { fontSize: '1em' }, { complete: done })
    },
    leave: function (el, done) {
      Velocity(el, { translateX: '15px', rotateZ: '50deg' }, { duration: 600 })
      Velocity(el, { rotateZ: '100deg' }, { loop: 2 })
      Velocity(el, {
        rotateZ: '45deg',
        translateY: '30px',
        translateX: '30px',
        opacity: 0
      }, { complete: done })
    }
  }

Vue动画方式4 - 多元素动画

1.多个元素过渡

  • 多个元素在transition标签中
  • 对于原生标签可以使用 v-if/v-else 来进行status的切换
    status的初始值在data中可以设定
  • 当有相同标签名的元素切换时,需要通过 key 设置唯一的值来标记以让 Vue 区分它们
    否则 Vue 为了效率只会替换相同标签内部的内容。即使在技术上没有必要,给在 <transition> 组件中的多个元素设置 key 是一个更好的实践。
<transition name="fade">
  <button key="on" v-if="status === 'off'"
          @click="status = 'on'">on</button>
  <button key="off" v-else 
          @click="status='off'">off</button>
</transition>

2.过渡模式

  • in-out:新元素先进行过渡,完成之后当前元素过渡离开。
    不常用
  • out-in:当前元素先进行过渡,完成之后新元素过渡进入。
    会把动画按照顺序依次执行,而不是同时执行
    同时执行:第一个元素消失时还占着位置,导致第二个元素出现时只能在旁边进行动画
<transition name="fade" mode="out-in">
  <!-- ... the buttons ... -->
</transition>
  • 轮播
    绝对定位和相对定位:当第二个元素先进来,第一个元素才消失的动画时,保证第二个元素能够直接到达固定位置,而不是被第一个元素挤到第二个位置去
.fade-enter{
  opacity:0;
  transform: translateX(-100px)
}
.fade-leave-to{
  opacity:0;
  transform: translateX(100px)
}

#example-4{
  position: relative;
  padding: 100px;
}
button{
  position: absolute;
}

3.多个组件的过渡

  • 多个组件的过渡简单很多 - 不需要使用 key
    因为组件不同,所以不需要key
  • 只需要使用动态组件
  • 如果有多个组件,想要在一个地方显示,切换的时候有动画
    1.在transition中使用component标签
    2.view是变量,data中view等于第几个组件的名字,它就先是哪个组件
    <component v-bind:is="view"></component>

总结

  • transition过渡
    原理:一开始给元素加一个类,过一帧再给一个类,中间创建补间动画
  • animation动画
    原理:和上面原理差不多,不过是用animation来告诉中间应该怎么动,动完恢复原样
  • 钩子+velocity1.js
    原理:这样中间怎么动都可以控制,完成后调用done(告诉vue动完了,可以进入下一个状态)
  • 多个元素切换
    1.元素类型相同要加key区分
    2.控制元素先出后进还是先进后出:mode=out-in/in-out
  • 多个组件切换
    <component :is='xxx'>放到transition中,其中xxx=v-a / v-b / v-c 等组件
  • 列表动画
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Vuetransition过渡动画Vue.js框架中用来实现组件的进入和离开过渡效果的功能。它可以在组件的挂载和卸载时自动添加/删除 CSS 类名,实现过渡效果。开发者可以通过添加自定义的 CSS 类名来实现不同的过渡效果。 ### 回答2: Vuetransition过渡动画是一种在元素进入或离开DOM时自动添加动画效果的机制。它基于CSS3的transitionanimation属性来实现,并且Vue提供了一些API用于手动控制过渡动画的行为。在Vue中,可以通过以下几个步骤来实现过渡动画的效果: 1. 定义CSS过渡效果:使用CSS transitionanimation属性定义元素的进入和离开动画,同时使用Vue提供的CSS类名来指定不同状态下的样式,例如v-enter、v-leave-to等。 2. 在组件中添加<transition>标签:将需要添加过渡动画元素包裹在<transition>标签中,同时添加name属性指定该过渡动画的名称,并使用CSS类名来指定不同状态下的样式。 3. 使用Vue提供的过渡钩子函数:在组件的变化过程中,Vue提供了一系列的过渡钩子函数,如before-enter、enter、leave等,在这些函数中可以手动控制过渡动画的行为,例如添加自定义类名、动态修改CSS属性等。 通过以上步骤,我们就可以在Vue中实现任意复杂的过渡动画效果,例如淡入淡出、旋转、缩放等等。同时,Vue过渡动画还支持多个元素同时进行动画、并行和串行动画等高级特性,可以满足多样化的动画需求。总之,Vuetransition过渡动画是一种非常强大、易用且高度可定制的动画机制,在前端开发中有着广泛的应用。 ### 回答3: Vuetransition过渡动画是一个常用的页面交互效果,在Vue中使用transition可以实现从一个状态到另一个状态的平滑过渡效果。 如何使用Vue transition: 1. 定义过渡样式 在 Vue 中使用transition需要自定义过渡样式。Vue过渡是以类名的形式加在元素上,所以需要定义好过渡的类名和CSS样式,如下: ``` .Fade-enter-active, .Fade-leave-active { transition: opacity .5s; } .Fade-enter, .Fade-leave-to { opacity: 0; } ``` 上面这个例子中,`.Fade-enter-active`和`.Fade-leave-active`是Vue过渡动画默认的类名,分别表示进入和离开状态时的动画。 2. 定义过渡组件 定义好过渡样式后,就需要在 Vue 组件中使用过渡,如下: ``` <transition name="Fade"> <div v-if="show">这是一个过渡动画</div> </transition> ``` `<transition>`标签内部是需要过渡的内容,`name`属性表示定义的过渡样式的名称。 3. 触发过渡效果 在Vue组件中使用 `v-if` 或 `v-show` 指令来控制元素的显示和隐藏,就可以触发过渡效果。 例如: ``` <script> export default { data () { return { show: true } }, methods: { toggleShow () { this.show = !this.show } } } </script> <template> <button @click="toggleShow">toggleShow</button> <transition name="Fade"> <div v-if="show">这是一个过渡动画</div> </transition> </template> ``` 在这个例子中,点击按钮时,`show`属性的值会发生变化,从而触发过渡效果。 总结: 使用Vue transition可以让页面在元素状态发生变化时产生平滑的过渡效果,提升页面交互的体验。在使用时需要定义好过渡样式和过渡组件,并在Vue组件中使用`v-if`或`v-show`指令控制元素的显示和隐藏,从而达到触发过渡效果的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值