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 相关文章推荐
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
js中回调函数的学习笔记
Jul 31 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
jquery增加和删除元素的方法
Jan 14 Javascript
javascript+html5实现仿flash滚动播放图片的方法
Apr 27 Javascript
Javascript进制转换实例分析
May 14 Javascript
jquery.qtip提示信息插件用法简单实例
Jun 17 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
JavaScript实现简单的双色球(实例讲解)
Jul 31 Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 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中switch语句用法详解
2015/08/17 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
javascript截取字符串小结
2015/04/28 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
Python线程中对join方法的运用的教程
2015/04/09 Python
Python代码调试的几种方法总结
2015/04/15 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
英国工具中心:UK Tool Centre
2017/07/10 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
中英双版中文教师求职信
2013/10/27 职场文书
小区门卫值班制度
2014/01/24 职场文书
元宵节主持词
2014/03/25 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
运动会宣传口号
2014/06/09 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书