子菜单的展开、收缩功能在许多系统上都很常见,如果想要在打开收起时带有动画效果,过去常常会通过 jQuery 实现。而在 Vue 项目中,我们可以单独封装一个动画组件,方便使用。

1,效果图

点击一级菜单时,子菜单会从上往下逐渐展开。

再次点击一级菜单,子菜单又会从下往上收起。

2,创建动画组件(collapseTransition.js)

组件代码如下,其内容是通过 overflow 获取高度的方法创建了一个函数式组件实现展开、收起的动画效果。

/* 视图伸缩动画效果组件 */

/* jshint esversion: 6 */

const elTransition = '0.3s height ease-in-out, 0.3s padding-top ease-in-out, 0.3s padding-bottom ease-in-out';

const Transition = {

'before-enter' (el) {

el.style.transition = elTransition;

if (!el.dataset) el.dataset = {};

el.dataset.oldPaddingTop = el.style.paddingTop;

el.dataset.oldPaddingBottom = el.style.paddingBottom;

el.style.height = 0;

el.style.paddingTop = 0;

el.style.paddingBottom = 0;

},

'enter' (el) {

el.dataset.oldOverflow = el.style.overflow;

if (el.scrollHeight !== 0) {

el.style.height = el.scrollHeight + 'px';

el.style.paddingTop = el.dataset.oldPaddingTop;

el.style.paddingBottom = el.dataset.oldPaddingBottom;

} else {

el.style.height = '';

el.style.paddingTop = el.dataset.oldPaddingTop;

el.style.paddingBottom = el.dataset.oldPaddingBottom;

}

el.style.overflow = 'hidden';

},

'after-enter' (el) {

el.style.transition = '';

el.style.height = '';

el.style.overflow = el.dataset.oldOverflow;

},

'before-leave' (el) {

if (!el.dataset) el.dataset = {};

el.dataset.oldPaddingTop = el.style.paddingTop;

el.dataset.oldPaddingBottom = el.style.paddingBottom;

el.dataset.oldOverflow = el.style.overflow;

el.style.height = el.scrollHeight + 'px';

el.style.overflow = 'hidden';

},

'leave' (el) {

if (el.scrollHeight !== 0) {

el.style.transition = elTransition;

el.style.height = 0;

el.style.paddingTop = 0;

el.style.paddingBottom = 0;

}

},

'after-leave' (el) {

el.style.transition = '';

el.style.height = '';

el.style.overflow = el.dataset.oldOverflow;

el.style.paddingTop = el.dataset.oldPaddingTop;

el.style.paddingBottom = el.dataset.oldPaddingBottom;

}

};

export default {

name: 'collapseTransition',

functional: true,

render (h, { children }) {

const data = {

on: Transition

};

return h('transition', data, children);

}

};

3,使用样例

使用时我们只需引入这个动画组件,包裹在需要显示、隐藏的元素外部即可(不再需要 css 与其它逻辑)

{{ firstLevel.title }}

{{ secondLevel.title }}

import axios from 'axios'

// 引入伸缩效果组件

import collapseTransition from './collapseTransition'

export default {

data () {

return {

isActive:false,

menus:[{

"title": "终端",

"icon": "/static/images/icon_1.png",

"isExpand": true,

"children": [{

"title": "智能物联网边缘计算"

}, {

"title": "终端融合能力"

}]

}, {

"title": "网络",

"icon": "/static/images/icon_2.png",

"isExpand": true,

"children": [{

"title": "客户侧内部组织网"

}]

}]

}

},

components: {

collapseTransition

},

methods:{

//展开收起按钮点击

changeExpand(menu) {

menu.isExpand = !menu.isExpand;

console.log(menu.isExpand);

}

}

}

#navigation {

background-color: #e7e7e7;

}

.menu-item {

width: 327px;

height: 49px;

line-height: 49px;

font-size: 14px;

border-bottom: solid 1px #c4c4c4;

color: #3d3d3d;

cursor:pointer;

}

.first-level {

background: url(../assets/images/first_level_menu_bg.png);

font-weight: bold;

}

.first-level img:first-child {

vertical-align:middle;

margin-left: 20px;

margin-right: 15px;

}

.first-level span {

width: 230px;

display: inline-block;

}

.second-level {

width: 320px;

border-left: solid 7px #e7e7e7;

}

.second-level:hover {

background-color: #ffffff;

color: #13a3a9;

border-left: solid 7px #f6ab36;

}

.second-level img:first-child {

vertical-align:middle;

margin-left: 61px;

margin-right: 10px;

}

vue伸缩效果_Vue.js - 元素展开、收起动画效果组件(附:二级菜单的展开、收缩动画效果)...相关推荐

  1. Axure RP9——【导航栏二级菜单的展开效果】

    导航栏二级菜单的展开效果 Navigation Bar · secondary menu Here's how I want things to unfold. 目录 导航栏二级菜单的展开效果 Nav ...

  2. WEB HTML 二级菜单 折叠展开菜单

    WEB HTML 二级菜单 折叠展开 WEB,HTML,二级菜单,折叠展开 一.效果图: 二.==完整==代码: 三.声明 ==文章属于原创,如需引用请@作者,并注明出处!== WEB,HTML,二级 ...

  3. 页面展开收起php代码,纯CSS3实现移动端展开和收起效果的示例代码

    本文介绍了纯CSS3实现移动端展开和收起效果的示例代码,分享给大家,具体如下: 展示效果: HTML代码 展开 收起 唧唧复唧唧,木兰当户织.不闻机杼声,惟闻女叹息.(惟闻 通:唯)问女何所思,问女何 ...

  4. vue 父链和子组件索引_Vue.js 学习笔记 第7章 组件详解

    组件(Component)是Vue.js最核心的功能,也是整个框架设计最精彩的地方,当然也是最难掌握的. 本章将带领你由浅入深地学习组件的全部内容,并通过几个实战项目熟练使用Vue组件. 7.1 组件 ...

  5. android 展开收起功能,Android开发实现ListView点击展开收起效果示例

    本文实例讲述了Android开发实现ListView点击展开收起效果.分享给大家供大家参考,具体如下: 废话不说先上效果: 实际上这是采用一个ExpandableListView实现的 布局文件很简单 ...

  6. vue 动态路由_Vue.js应用性能优化三

    在上一篇Vue.js应用性能优化二中,我们学习了足够强大的模式,可以显着提高应用程序的性能 - 按照路由分割代码.虽然按照路由拆分代码非常有用,但在用户访问我们的站点后,仍然有很多内部代码不需要.在本 ...

  7. vue router 参数_Vue.js项目开发技术解析

    Vue.js项目开发技术解析 一.Vue.js实例 在一个Vue.js工程中,用于显示内容最基层的实例称之为根实例.通过该实例可以进行页面或组件的更新和显示.对于项目本身而言,无论是什么样的页面,都要 ...

  8. cdn加载vue很慢_Vue.js 项目打包优化实践

    首先上结果: 把常用的 Vue,router,vuex,axios 的 runtime 包拆分了出来,改为 cdn: 另外就是对于自己编写的业务代码进行分包,根据路由进行懒加载,可以较好的提高首屏加载 ...

  9. vue 懒人_Vue.js 中的实用工具方法【推荐】

    收集日常开发中常用到的一些工具方法, 包含 vue 的公用过滤器.公用指令等 (PS: 懒人养成记) 公用自定义过滤器 import Vue from 'vue' import moment from ...

最新文章

  1. c#_Func和Action委托简介
  2. 西北工业大学 计算机学院王云岚,王云岚
  3. 不同php文件,不同文件构建PHP程序的正确方式
  4. HDU 1087 [Super Jumping! Jumping! Jumping!]动态规划
  5. PCFG中inside和outside算法详解
  6. 计算机多媒体制作三级证书,多媒体作品制作员(师)国家职业标准
  7. 软件开源许可协议简介
  8. html中如何淡化背景图片,Word2010如何去除图片背景
  9. 【欧拉计划第 1 题】3 或 5 的倍数 Multiples of 3 or 5
  10. 用python 打印等腰三角形
  11. 前端开发也要知道的 DNS
  12. 算法之狄克斯特拉算法
  13. pandas 如何把时间转成index_pandas 时间格式转换的实现
  14. 艾孜尔江在腾讯网上的影视作品
  15. mysql查询95031班人数_MySQL的查询练习 - osc_1ngzqx2h的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. 微信小程序使用crypto.js加密解密
  17. 【模板】最小费用最大流
  18. Mysql - 知识图谱总览
  19. TPESD0502S4SOT-143工作电压5V用于高速线路保护的2线ESD保护二极管阵列管TPESD0502S4 USB端口和以太网端口保护TVS二极管阵列,低泄漏电流和箝位电压25V结电容1PF
  20. 代码改变生活-使用You-Get下载bilibili的视频【一】

热门文章

  1. python 图片背景前景分离_【绝了】用 Python 把朋友头像变表情包!
  2. Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...
  3. linux内核线程绑定到单个核,linux 将进程或者线程绑定到指定的cpu上
  4. LeetCode之两数之和
  5. Linux 程 序 员 失 业 警 告
  6. 12种NumpyPandas高效技巧
  7. 一个励志PM小哥哥的Java转型之路
  8. 从0到1构建美团压测工具
  9. 玩转算法值面试-第五章 -在链表中穿针引线
  10. 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型