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 相关文章推荐
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
Jun 14 Javascript
select标记美化--JS式插件、后期加载
Apr 01 Javascript
Javascript 函数parseInt()转换时出现bug问题
May 20 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
关于网页中的无缝滚动的js代码
Jun 09 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
原生js实现中奖信息无间隙滚动效果
Jan 18 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
Aug 16 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 29 Javascript
Vue数据绑定实例写法
Aug 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
搜索引擎技术核心揭密
2006/10/09 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
JS delegate与live浅析
2013/12/21 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
python 实现归并排序算法
2012/06/05 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python BS4库的安装与使用详解
2018/08/08 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
中秋节礼品促销方案
2014/02/02 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
爱祖国演讲稿
2014/05/04 职场文书
企业文化口号
2014/06/12 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
python脚本框架webpy模板赋值实现
2021/11/20 Python
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers