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 04 Javascript
jquery cookie实现的简单换肤功能适合小网站
Aug 25 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
Apr 26 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 Javascript
BootStrap注意事项小结(五)表单
Mar 10 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 Javascript
微信小程序实现带放大效果的轮播图
May 26 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 24 Javascript
JavaScript中的LHS和RHS分析详情
Apr 06 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的知识
2006/11/17 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
Django的数据模型访问多对多键值的方法
2015/07/21 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python实现简易数码时钟
2021/02/19 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
教育基金募捐倡议书
2014/05/14 职场文书
开工仪式策划方案
2014/05/23 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python