首页 > 其他分享 >Vue.js 过渡和动画

Vue.js 过渡和动画

时间:2023-06-23 16:32:52浏览次数:44  
标签:动画 Vue 元素 js leave 过渡


学习目录:

  1. Vue.js 简介
  2. Vue.js 实例与数据绑定
  3. Vue.js 计算属性和侦听器
  4. Vue.js 条件渲染和列表渲染
  5. Vue.js 事件处理
  6. Vue.js 表单输入绑定
  7. Vue.js 组件基础
  8. Vue.js 组件通信
  9. Vue.js 插槽
  10. Vue.js 动态组件和异步组件
  11. Vue.js 自定义指令
  12. Vue.js 过渡和动画
  13. Vue.js 混入
  14. Vue.js 自定义事件和 v-model
  15. Vue.js 渲染函数和 JSX
  16. Vue.js 插件
  17. Vue.js 单文件组件
  18. Vue.js Webpack 配置和打包优化
  19. Vue.js Vue Router
  20. Vue.js Vuex
  21. Vue.js 服务端渲染
  22. Vue.js 代码测试和调试
  23. Vue.js 生态系统
  24. Vue.js 最佳实践和性能优化
  25. Vue.js 应用部署和上线


过渡是指在元素插入、更新或删除时添加动画效果,而动画则是指在元素上添加动画效果,例如旋转、缩放或平移。这篇文章将介绍如何在 Vue.js 中使用过渡和动画。

过渡

过渡是指在元素插入、更新或删除时添加动画效果。Vue.js 中的过渡可以通过以下两种方式实现:

CSS 过渡

CSS 过渡是指通过 CSS 过渡类来实现过渡效果。Vue.js 中的过渡类有以下几种:

  • v-enter: 进入过渡的开始状态,元素被插入后立即生效,只应用一帧样式。
  • v-enter-active: 进入过渡的结束状态,元素被插入后,过渡中的样式都会应用,直到过渡结束。
  • v-enter-to: 进入过渡的结束状态,与 v-enter-active 相同,但是在过渡结束之后会被删除。
  • v-leave: 离开过渡的开始状态,元素被删除前立即生效,只应用一帧样式。
  • v-leave-active: 离开过渡的结束状态,元素被删除前,过渡中的样式都会应用,直到过渡结束。
  • v-leave-to: 离开过渡的结束状态,与 v-leave-active 相同,但是在过渡结束之后会被删除。

在使用 CSS 过渡时,需要在 CSS 中定义这些过渡类,例如:

.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}

然后,在 Vue.js 模板中使用 transition 元素来包裹需要过渡的元素,例如:

<transition name="fade">
  <div v-show="show">Hello, world!</div>
</transition>

在上面的例子中,name 属性指定了过渡类的名称。当 v-show 的值为 true 时,元素会以淡入淡出的方式显示和隐藏。

JavaScript 过渡

JavaScript 过渡是指通过 JavaScript 来实现过渡效果。Vue.js 中的 JavaScript 过渡可以使用以下钩子函数:

  • before-enter: 在元素被插入之前调用。
  • enter: 在元素被插入后调用。
  • after-enter: 在元素被插入并且过渡动画结束后调用。
  • enter-cancelled: 在元素插入过程中,如果禁用了过渡或终止了过渡,则调用。
  • before-leave: 在元素被删除之前调用。
  • leave: 在元素被删除后调用。
  • after-leave: 在元素被删除并且过渡动画结束后调用。
  • leave-cancelled: 在元素删除过程中,如果禁用了过渡或终止了过渡,则调用。

在使用 JavaScript 过渡时,需要在 Vue.js 组件中定义这些钩子函数,例如:

<transition
  @before-enter="beforeEnter"
  @enter="enter"
  @after-enter="afterEnter"
  @enter-cancelled="enterCancelled"
  @before-leave="beforeLeave"
  @leave="leave"
  @after-leave="afterLeave"
  @leave-cancelled="leaveCancelled"
>
  <div v-show="show">Hello, world!</div>
</transition>

然后,在 Vue.js 组件中定义这些钩子函数,例如:

export default {
  data() {
    return {
      show: false,
    };
  },
  methods: {
    beforeEnter(el) {
      el.style.opacity = 0      el.style.transform = 'translateY(20px)';
    },
    enter(el, done) {
      setTimeout(() => {
        el.style.opacity = 1;
        el.style.transform = 'translateY(0)';
        done();
      }, 500);
    },
    afterEnter(el) {
      console.log('afterEnter');
    },
    enterCancelled(el) {
      console.log('enterCancelled');
    },
    beforeLeave(el) {
      console.log('beforeLeave');
    },
    leave(el, done) {
      setTimeout(() => {
        el.style.opacity = 0;
        el.style.transform = 'translateY(20px)';
        done();
      }, 500);
    },
    afterLeave(el) {
      console.log('afterLeave');
    },
    leaveCancelled(el) {
      console.log('leaveCancelled');
    },
  },
};

在上面的例子中,beforeEnterenterafterEnter 钩子函数用于定义进入过渡的动画,而 beforeLeaveleaveafterLeave 钩子函数用于定义离开过渡的动画。enter-cancelledleave-cancelled 钩子函数用于处理过渡被取消的情况。

动画

动画是指在元素上添加动画效果,例如旋转、缩放或平移。Vue.js 中的动画可以通过以下两种方式实现:

CSS 动画

CSS 动画是指通过 CSS 动画来实现动画效果。在 Vue.js 中,可以使用 transition 元素来添加 CSS 动画效果,例如:

<transition name="rotate">
  <div :style="{ transform: `rotate(${angle}deg)` }">Hello, world!</div>
</transition>

在上面的例子中,name 属性指定了动画类的名称,而 :style 绑定了旋转角度。当 angle 的值变化时,元素会以旋转的方式进行动画。

JavaScript 动画

JavaScript 动画是指通过 JavaScript 来实现动画效果。在 Vue.js 中,可以使用 transition 元素来添加 JavaScript 动画效果,例如:

<transition
  @before-enter="beforeEnter"
  @enter="enter"
  @before-leave="beforeLeave"
  @leave="leave"
>
  <div :style="{ transform: `translate(${x}px, ${y}px)` }">Hello, world!</div>
</transition>

在上面的例子中,beforeEnterbeforeLeave 钩子函数用于定义进入和离开动画的初始状态,而 enterleave 钩子函数用于定义进入和离开动画的结束状态。xy 绑定了元素的位置,当它们的值变化时,元素会以平移的方式进行动画。

总结

Vue.js 中的过渡和动画为开发人员提供了丰富的动画效果。过渡可以通过 CSS 或 JavaScript 实现,而动画可以通过 CSS 或 JavaScript 实现。无论使用哪种方式,都需要在 Vue.js 模板或组件中添加适当的元素和钩子函数来实现动画效果。

标签:动画,Vue,元素,js,leave,过渡
From: https://blog.51cto.com/u_16123429/6538297

相关文章

  • JS逆向 -- 某资源网站下载验证绕过
    一、当搜索资源的时候,有时会遇到类似的情况,就是关注微信某公众号好,回复相应的内容,获取下载地址二、随便输入一个假的验证码,提示了验证码错误三、F12打开开发者工具,点击右上方的三个点,选择搜索,全局搜索“验证码错误”四、双击进入代码段,里面有个1219,输入验证码,点击提交查看五、成功......
  • Three.js教程:高光网格材质Phong
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生高光网格材质Phong高光网格材质MeshPhongMaterial和基础网格材质MeshBasicMaterial、漫反射网格材质MeshLambertMaterial一样都是网格模型的Mesh的材质。高光网格材质MeshPhongMaterial和漫反射网格材质Mesh......
  • js中new Map ( )的使用场景
    当有一组数据:letarr=[{name:'钢筋',value:11},{name:'水泥',value:12},{name:'混凝土',value:13},{name:'加气砖',value:14}]后台返回了一个13,但是我们想要拿到的是混凝土,一般的做法:arr.forEach(item=>{if(item.value==......
  • js:highlight.js实现代码的语法高亮
    highlight.jsSyntaxhighlightingfortheWeb译文:highlight.js为Web突出显示语法文档https://highlightjs.org/使用方式1、方式一:cdn<linkrel="stylesheet"href="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/atom-one-da......
  • Vue(四):el和data的两种写法
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>el和data的两种写法</title><scripttype="text/javascript"src="../js/vue.js"></script></head><body......
  • Vue(五):Vue中的MVVM
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>Vue中的MVVM</title><scripttype="text/javascript"src="../js/vue.js"></script></head><body>......
  • jstack Dump 日志文件分析
    jstackDump日志文件中的线程状态dump文件里,值得关注的线程状态有:1.死锁,Deadlock(重点关注)2.Runnable3.等待资源,Waitingoncondition(重点关注)4.Waitingonmonitorentry(重点关注)5.暂停,Suspended6.Object.wait()或TIMED_WAITING7.阻塞,Blocked(重点......
  • Vue前端权限管理
    一、登录权限控制实现哪些页面能被未登录的用户访问,哪些页面只有用户登录后才能被访问1、实现:在路由对象中以添加meta的方式去实现登录页面权限控制需要登录才能显示的页面设置meta.need_login属性export const routes = [      {         p......
  • 遍历Json
    privatevoidSetShpFcSaveC5s(ShpFcSavemodel){if(string.IsNullOrWhiteSpace(model.C5)==false){JsonDocumentdocument=JsonDocument.Parse(model.C5);foreach(JsonElementjsonElementindocument.RootElement.EnumerateArray())......
  • .NET 6 中 System.Text.Json 的新特性
    1支持忽略循环引用在.NET6之前,如果 System.Text.Json 检测到循环引用,就会抛出 JsonException 异常。在.NET6中,你可以忽略它们。Categorydotnet=new(){Name=".NET6",};CategorysystemTextJson=new(){Name="System.Text.Json",Parent=......