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复制内容到剪切板的实例代码(兼容IE与火狐)
Nov 19 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
Node.js中使用jQuery的做法
Aug 17 Javascript
原生JS获取元素集合的子元素宽度实例
Dec 14 Javascript
微信小程序中的swiper组件详解
Apr 14 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
浅谈vue项目可以从哪些方面进行优化
May 05 Javascript
jQuery 实现批量提交表格多行数据的方法
Aug 09 jQuery
JavaScript读写二进制数据的方法详解
Sep 09 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python根据距离和时长计算配速示例
2014/02/16 Python
深入浅析python定时杀进程
2016/06/06 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
实习护士自我鉴定
2013/10/13 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
班级活动总结格式
2014/08/30 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
预备党员入党感言
2015/08/01 职场文书
小学四年级作文之写景
2019/08/23 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android