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 相关文章推荐
jQuery 自定义函数写法分享
Mar 30 Javascript
jQuery移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
Node.js实现Excel转JSON
Apr 24 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
Aug 24 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
vue实现分页组件
Jun 16 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 Javascript
js实现超级玛丽小游戏
Mar 18 Javascript
JS script脚本中async和defer区别详解
Jun 24 Javascript
Vue SPA 首屏优化方案
Feb 26 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
php 冒泡排序 交换排序法
2011/05/10 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
JS 判断代码全收集
2009/04/28 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python中cPickle用法例子分享
2014/01/03 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
python 多线程串行和并行的实例
2019/02/22 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
综合实践教学反思
2014/01/31 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
公司晚会主持词
2019/04/17 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android