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 相关文章推荐
offsetParent 算法分析
Apr 05 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
JS实现图片垂直居中显示小结
Dec 13 Javascript
Bootstrap整体框架之CSS12栅格系统
Dec 15 Javascript
js实现按座位号抽奖
Apr 05 Javascript
jquery自定义显示消息数量
Dec 19 jQuery
基于node.js实现爬虫的讲解
Feb 18 Javascript
vue+php实现的微博留言功能示例
Mar 16 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
javascript自定义加载loading效果
Sep 15 Javascript
uniapp 微信小程序 自定义tabBar 导航
Apr 22 Javascript
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
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
浅谈 vue 中的 watcher
2017/12/04 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
Python中apply函数的用法实例教程
2014/07/31 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
批处理与python代码混合编程的方法
2016/05/19 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
利用Python破解斗地主残局详解
2017/06/30 Python
python实现共轭梯度法
2019/07/03 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
什么是事务?为什么需要事务?
2012/01/09 面试题
小班秋游活动方案
2014/02/22 职场文书
党员教师工作决心书
2014/03/13 职场文书
校本教研活动总结
2014/07/01 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
2019银行竞聘书
2019/06/21 职场文书
七年级作文之冬景
2019/11/07 职场文书