全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Vue中过度动画效果应用

一、实现动画过渡效果的几种方式

实现动画必须要将要进行动画的元素利用<transition>标签进行包裹

1、利用CSS样式实现过渡效果

 <transition name="fade"></transition>

1.v-enter: 定义进入过渡的开始状态。在元素被插入时生效,在下一个帧移除。

2.v-enter-active: 定义进入过渡的结束状态。在元素被插入时生效,在 transition/animation 完成之后移除。

3.v-leave: 定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧移除。

4.v-leave-active: 定义离开过渡的结束状态。在离开过渡被触发时生效,在 transition/animation 完成之后

通过name的名称进行重命名,在样式文件中进行.fade-enter-active设置动画的效果即transition属性,需要注意的是动画结束后样式将会移除,所以如果想要动画实现之后元素保持有某个样式,则需要transition标签里面的元素的样式表中进行设置,此情况是针对元需要通过改变元素的属性来显示元素,如定位top,left以及通过transform将显示的元素的位置改变从而让元素出现在当前的视图窗口中时,但是如果元素v-show为true之后元素已经在视图中央显示了,不需要位置的移动将元素移动到视图中,只是想要显示的时候显示有动画效果的,则直接将动画结束的属性设置在v-enter-active/v-leave-active中即可。也就是说动画的属性如果只是产生效果,不对元素的任何属性进行修改,也就是动画中的属性样式不需要永久添加到dom元素中,则直接按后者的方式定义,如果说动画的属性同时相对元素进行样式设计,属性样式需要被添加到dom元素上,则需要按照前者的方式。

<transition name="fold">
    <div class="shopcart-list" v-show="listShow">
     <div class="list-header">
      <h1 class="title">购物车</h1>
      <span class="empty" @click="empty">清空</span>
     </div>
     <div class="list-content" ref="list">
      <ul>
       <li class="food border-1px" v-for="(food,index) in selectFoods" v-show="food.count>0">
        <span class="name">{{selectName[index]}}</span>
        <div class="price">
         <span>¥{{food.price*food.count}}</span>
        </div>
        <div class="cartcontrol-wrapper">
         <v-cartcontrol :food="food"></v-cartcontrol>
        </div>
       </li>
      </ul>
     </div>
    </div>
   </transition>
 .fold-enter-active,.fold-leave-active
   transition:all 0.5s
  .fold-enter,.fold-leave
   transform :translate3d(0,0,0)
  .shopcart-list
   position:absolute
   transform:translate3d(0,-100%,0)//动画结束后的效果需要在此处进行设置,设置在.fold-enter-active中,元素动画结束后该样式属性会被移除掉,将会看不到想要的效果
   top: 100%//元素即使显示也不再视图窗口中,通过transform实现显示
   z-index:-1
   width:100%

2、利用animation或者是动画库实现动画效果

<div id="example-2">
 <button @click="show = !show">Toggle show</button>
 <transition name="bounce">
  <p v-if="show">Look at me!</p>
 </transition>
</div>
new Vue({
 el: '#example-2',
 data: {
  show: true
 }
})
.bounce-enter-active {
 animation: bounce-in 0.5s linear;
}
.bounce-leave-active {
 animation: bounce-out 0.5s linear;
}
@keyframes bounce-in {
 0% {
  transform: scale(0);
 }
 50% {
  transform: scale(1.5);
 }
 100% {
  transform: scale(1);
 }
}
@keyframes bounce-out {
 0% {
  transform: scale(1);
 }
 50% {
  transform: scale(1.5);
 }
 100% {
  transform: scale(0);
 }
}

3、自定义过度类名

  1. enter-class
  2. enter-active-class
  3. leave-class
  4. leave-active-class

 他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如 Animate.css 结合使用十分有用。

<link href="https://unpkg.com/animate.css@3.5.1/animate.min.css" rel="external nofollow" rel="stylesheet" type="text/css">

<div id="example-3">

 <button @click="show = !show">

  Toggle render

 </button>

 <transition

  name="custom-classes-transition"

  enter-active-class="animated tada"

  leave-active-class="animated bounceOutRight"

 >

  <p v-if="show">hello</p>

 </transition>

</div> 
new Vue({
 el: '#example-3',
 data: {
  show: true
 }
})

可以在样式中同时使用transition和animation

4、利用JavaScript钩子函数实现过渡效果

<transition
 v-on:before-enter="beforeEnter"
 v-on:enter="enter"
 v-on:after-enter="afterEnter"
 v-on:enter-cancelled="enterCancelled"
 v-on:before-leave="beforeLeave"
 v-on:leave="leave"
 v-on:after-leave="afterLeave"
 v-on:leave-cancelled="leaveCancelled"
>
 <!-- ... -->
</transition>
methods: {
 // --------
 // 进入中
 // --------
 beforeEnter: function (el) {
  // ...
 },
 // 此回调函数是可选项的设置
 // 与 CSS 结合时使用
 enter: function (el, done) {
  // ...
  done()
 },
 afterEnter: function (el) {
  // ...
 },
 enterCancelled: function (el) {
  // ...
 },
 // --------
 // 离开时
 // --------
 beforeLeave: function (el) {
  // ...
 },
 // 此回调函数是可选项的设置
 // 与 CSS 结合时使用
 leave: function (el, done) {
  // ...
  done()
 },
 afterLeave: function (el) {
  // ...
 },
 // leaveCancelled 只用于 v-show 中
 leaveCancelled: function (el) {
  // ...
 }
}

在使用钩子函数实现动画的时候注意dom的异步刷新,需要结合this.$nextTick(),同时在leave和enter中设置样式前最好迫使dom进行回流(reflow)使dom重新渲染,如获取元素的offsetHeight等,然后在this.$nextTick()中设置新的样式,不然又可能实现不了动画的效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue过度动画  # vue过度  # vue  # css过度  # 详解vue过度效果与动画transition使用示例  # 深入理解Vue的过度与动画  # Vue学习笔记进阶篇之单元素过度  # Vue中transition标签的基本使用教程  # vue中transition组件在项目中运用小结  # Vue transition实现点赞动画效果的示例  # vue使用transition组件动画效果的实例代码  # Vue transition过渡组件详解  # 移除  # 将会  # 不需要  # 结束后  # 回调  # 则需  # 的是  # 他们的  # 被插  # 出现在  # 或者是  # 几种  # 自定义  # 如果说  # 购物车  # 第三方  # 需要注意  # 又可  # 大家多多  # 清空 


相关文章: c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  网站图片在线制作软件,怎么在图片上做链接?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  建站之星微信建站一键生成小程序+多端营销系统  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  c++怎么用jemalloc c++替换默认内存分配器【性能】  如何快速生成凡客建站的专业级图册?  浅析上传头像示例及其注意事项  再谈Python中的字符串与字符编码(推荐)  如何选择建站程序?包含哪些必备功能与类型?  建站主机如何选?性能与价格怎样平衡?  建站主机是否属于云主机类型?  建站主机选购指南与交易推荐:核心配置解析  临沂网站制作企业,临沂第三中学官方网站?  建站之星如何修改网站生成路径?  临沂网站制作公司有哪些,临沂第四中学官网?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  建站之星如何实现网站加密操作?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  如何在宝塔面板创建新站点?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  制作网站的模板软件,网站怎么建设?  如何快速上传自定义模板至建站之星?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  建站之星后台密码遗忘或太弱?如何重置与强化?  建站主机是什么?如何选择适合的建站主机?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建站之星展会模板:智能建站与自助搭建高效解决方案  建站之星导航配置指南:自助建站与SEO优化全解析  建站之星安装模板失败:服务器环境不兼容?  如何快速搭建高效香港服务器网站?  如何确保FTP站点访问权限与数据传输安全?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何获取上海专业网站定制建站电话?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  如何选择适配移动端的WAP自助建站平台?  如何在Golang中使用replace替换模块_指定本地或远程路径  岳西云建站教程与模板下载_一站式快速建站系统操作指南  建站主机选哪种环境更利于SEO优化?  如何通过FTP空间快速搭建安全高效网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  建站中国官网:模板定制+SEO优化+建站流程一站式指南  Android自定义控件实现温度旋转按钮效果  招贴海报怎么做,什么是海报招贴?  如何在云服务器上快速搭建个人网站?  定制建站模板如何实现SEO优化与智能系统配置?18字教程 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。