animate.css与vue中的v-if/v-show如何一起使用

第一步:在已有的vue项目中安装animate.css

javascript 复制代码
npm install animate.css --save

第二步:在 main.js 引入

javascript 复制代码
import 'animate.css'

第三步:如果在vue中使用了v-if 或者v-show 的话就不能直接在元素上加入animate的class。我们应该在v-if/v-show的元素外层添加transition标。标签添加完成之后要注意几点:

  1. v-if 的切换太快,动画来不及执行就被移除了 DOM。可以通过设置 transition 的 duration 参数让动画时间稍长一些。
  2. 每次 v-if 切换时,都会重新创建 DOM 元素,Animate.css 的类会被移除。需要在切换后手动重新加上 Animate.css 的类。
  3. v-if 会直接操作 DOM,这样会跳过 Vue 的过渡系统。可以改为使用 transition 组件+v-show 来实现切换。
  4. class 应用顺序错误,Animate.css 的类必须在内联样式和其他类之后应用才能生效。
  5. CSS 样式优先级问题,Animate.css 的样式被其他样式覆盖了。可以通过提高 Animate.css 样式优先级来解决。
  6. 如果是页面初始加载没有动画,可能是因为元素首次渲染,需要触发第二次渲染才会有过渡动画。

第四步根据下载的Animate.css依赖中的class名来添加到transition上面。

第五步transition写法,例如:

html 复制代码
//isAcademic true 显示二维码图片,false显示客服图标。默认为true
<template>
 <transition
      enter-active-class="animate__animated animate__rotateInUpRight"
      leave-active-class="animate__animated animate__rotateOutUpRight"
      appear
    >
      <div class="academic-erweima"
           v-show="isAcademic"
      >
        <i class="el-icon-close academic-erweima-colse" @click="isAcademic = false"></i>
        <img src="../../assets/images/zhiku/erweima.png" alt="" class="erweima-acade">
        <p class="text-a">扫码咨询专家助手</p>
      </div>
    </transition>

    <transition
      enter-active-class="animate__animated animate__lightSpeedInRight"
      leave-active-class="animate__animated animate__lightSpeedOutRight"
    >
      <div
        v-show="!isAcademic"
        class="academic-erweima academic-erweima-small text-a" @click="isAcademic = true">
        专家助手
      </div>
    </transition>
</<template>

解释

  • enter-active-class :定义进入过渡的活动状态时应用的类。在元素被插入时生效,用于应用进入动画。
  • leave-active-class:定义离开过渡的活动状态时应用的类。在元素被移除时生效,用于应用离开动画。
  • appear:是否在初始渲染时使用过渡。可以应用初始挂载动画。
相关推荐
卸任9 小时前
Vibe coding工具使用心得
前端·ai编程
brien910 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance10 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M10 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写10 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李10 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易10 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马10 小时前
前沿视界
前端
kyriewen10 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易11 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员