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 flash激活
Oct 19 Javascript
jquery插件之easing 动态菜单
Aug 21 Javascript
js使用removeChild方法动态删除div元素
Aug 01 Javascript
jQuery中extend函数详解
Feb 13 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
Feb 25 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
May 04 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
JQuery学习总结【二】
Dec 01 Javascript
详解js的事件代理(委托)
Dec 22 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
Mar 30 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
Apr 23 jQuery
基于Vue sessionStorage实现保留搜索框搜索内容
Jun 01 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
php分页查询的简单实现代码
2017/03/14 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP与以太坊交互详解
2018/08/24 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
python将unicode转为str的方法
2017/06/21 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
法国家具及室内配件店:home24
2017/01/21 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
经典的班主任推荐信
2013/10/28 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
人力资源管理求职信
2014/08/07 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android