Vue中的transition封装组件的实现方法


Posted in Javascript onAugust 13, 2019

vue版本信息:2.5.2

问题起源于使用Vue做网站时涉及到的一个小部件显示动画,阅读了Vue的文档后结合网上各位的经验,花了点时间研究了下。

Vue中的transition封装组件的实现方法

最终的效果如上图所示,当鼠标移入灰色方块时弹出层会至上而下显示出来,类似于 拉链式窗帘(?)。

实例

实现上图所示的效果代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>transition</title>

 <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>
</head>
<body>
 <div id="app">
   <div
    @mouseenter="show"
    @mouseleave="hide">
     <div class="enter-div">
      {{content}}
     </div>
     <transition name="fade">
      <div class="showContainer" v-show="flag">
       弹出层
      </div>
     </transition>
   </div>
 </div>

 <script>
  var app = new Vue({
   el: "#app",
   data: {
    flag: false,
    content: "鼠标移入"
   },
   methods: {
    show: function () {
     this.flag = true;
     this.content = "鼠标移出";
    },
    hide: function () {
     this.flag = false;
     this.content = "鼠标移入";
    }
   }
  })
 </script>

 <style>
  body, html {
   height: 100%;
   margin: 0;
  }

  #app {
   width: 100%;
   height: 100%;
   display: flex;
   justify-content: center;
   align-items: center;
  }

  .enter-div {
   width: 200px;
   height: 50px;
   /* margin-top: 200px; */
   background-color:darkgrey;
   text-align: center;
   line-height: 50px;
  }

  .showContainer {
   position: absolute;
   right: 620px;
   top: 250px;
   width: 200px;
   /* height: 96px; */
   line-height: 96px;
   text-align: center;
   color: black;
   box-shadow: 0 0 5px -1px #ccc;
   z-index: 10;
   overflow: hidden;
  }

  /* 进入和离开时过渡状态的 动画状态 */
  .fade-enter-active, .fade-leave-active {
   transition: all .10s ease;
   height: 96px;
  }

  /* 进入时的 初始状态 和 离开时动画的 结束状态 */
  .fade-enter, .fade-leave-to {
   height: 0;
  }

  /* 离开时的 初始状态 和 进入时动画的 结束状态 */
  .fade-enter-to, .fade-leave {
   height: 96px;
  }
 </style>
</body>
</html>

transition的使用

Vue中的transition封装组件的实现方法

以上为各类状态/过程对应的类名示意图。

1.没有名字的transition组件

<transition>
  <div>
  ......
  </div>
</transition>

<style>
  .v-enter, .v-leave-to {
  ......
  }
  
  .v-leave, .v-enter-to {
  ......
  }
  
  ......
</style>

2.有名字的transition组件

如下代码,该transition组件的name属性为fade,那么应设置的动画类名为fade-enter,其他的类名也是如此。
<transition name="fade">
  <div>
  ......
  </div>
</transition>

<style>
  .fade-enter, .fade-leave-to {
  ......
  }
  
  .fade-leave, .fade-enter-to {
  ......
  }
  
  ......
</style>

3.自定义过渡类名

<transition
  name="show"
  enter-class="show-enter"
  enter-active-class="animation fly"
  leave-active-class="xxx"
  ......
>
  <div>
  ......
  </div>
</transition>

<style>
  .show-enter {
  ......
  }
  
  .animation {
  ......
  }
  
  .fly {
  ......
  }
  
  ......
</style>

4.自定义钩子函数

<transition
  v-on:enter="enter"
  v-on:after-enter="after"
  v-on:leave="leave" 
  ......
>
  <div>
  ......
  </div>
</transition>
methods: {
  enter: function (el) {
    ......
  },
  after: function (el) {
    ......
  },
  ......
}

官方文档中的用法不止这几种,这里只例举了几种简单常用的。源码在此

Javascript 相关文章推荐
动态控制Table的js代码
Mar 07 Javascript
简单的无缝滚动程序-仅几行代码
May 08 Javascript
javascript各浏览器中option元素的表现差异
Apr 07 Javascript
jQuery的12招常用技巧分享
Aug 08 Javascript
javascript中onmouse事件在div中失效问题的解决方法
Jan 09 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
Jul 17 Javascript
Bootstrap组合上、下拉框简单实现代码
Mar 06 Javascript
vue-cli常用设置总结
Feb 24 Javascript
vue中动态select的使用方法示例
Oct 28 Javascript
vue 导航守卫和axios拦截器有哪些区别
Dec 19 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
vue特效之翻牌动画
Apr 20 Vue.js
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
Aug 12 #Javascript
详解json串反转义(消除反斜杠)
Aug 12 #Javascript
json 带斜杠时如何解析的实现
Aug 12 #Javascript
electron实现静默打印的示例代码
Aug 12 #Javascript
微信小程序 弹窗输入组件的实现解析
Aug 12 #Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 #Javascript
ElementUI radio组件选中小改造
Aug 12 #Javascript
You might like
Syphon 使用方法
2021/03/03 冲泡冲煮
PHP 文件缓存的性能测试
2010/04/25 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
js的event详解。
2006/09/06 Javascript
filemanage功能中用到的common.js
2007/04/08 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
js实现轮播图特效
2020/05/28 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现多进程代码示例
2018/10/31 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
详解python中docx库的安装过程
2019/11/08 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
医学生个人求职信范文
2013/09/24 职场文书
自我评价如何写好?
2014/01/05 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
战略合作意向书
2014/07/29 职场文书
甜品店创业计划书
2014/09/21 职场文书
个人学习总结范文
2015/02/15 职场文书
家庭经济困难证明
2015/06/23 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
python之json文件转xml文件案例讲解
2021/08/07 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA