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 相关文章推荐
用js+xml自动生成表格的东西
Dec 21 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
Apr 02 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
详解JavaScript基于面向对象之继承
Dec 13 Javascript
chrome浏览器如何断点调试异步加载的JS
Sep 05 Javascript
js制作可以延时消失的菜单
Jan 13 Javascript
windows下vue.js开发环境搭建教程
Mar 20 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
JS定义函数的几种常用方法小结
May 23 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
Sep 27 Javascript
Js代码中的span拼接问题解决
Nov 22 Javascript
原生JavaScript实现五子棋游戏
Nov 09 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
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
My Desktop :) 桌面式代码
2008/12/29 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
Python 流程控制实例代码
2009/09/25 Python
Python重新引入被覆盖的自带function
2014/07/16 Python
python实现求最长回文子串长度
2018/01/22 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
Django xadmin安装及使用详解
2020/10/26 Python
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
大学四年规划书范文
2013/12/27 职场文书
优秀幼教自荐信
2014/02/03 职场文书
写得不错的求职信范文
2014/07/11 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
Python如何将list中的string转换为int
2022/07/15 Ruby