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 相关文章推荐
学习YUI.Ext 第七天--关于View&amp;JSONView
Mar 10 Javascript
jQuery代码优化 遍历篇
Nov 01 Javascript
js function定义函数的几种不错方法
Feb 27 Javascript
浅谈JavaScript for循环 闭包
Jun 22 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
Oct 30 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
详解vue-cli3多页应用改造
Jun 04 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 Javascript
JS实现商品橱窗特效
Jan 09 Javascript
ES6如何用一句代码实现函数的柯里化
Jan 18 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
基于empty函数的判断详解
2013/06/17 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
jquery validate使用攻略 第四步
2010/07/01 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
Python分类测试代码实例汇总
2020/07/23 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
关键字final的用法
2013/10/02 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
电子商务应届生求职信
2013/11/16 职场文书
兼职学生的自我评价
2013/11/24 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
团队激励口号
2014/06/06 职场文书
运动会开幕词
2015/01/28 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技