vue伸缩效果_Vue.js - 元素展开、收起动画效果组件(附:二级菜单的展开、收缩动画效果)...
子菜单的展开、收缩功能在许多系统上都很常见,如果想要在打开收起时带有动画效果,过去常常会通过 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 - 元素展开、收起动画效果组件(附:二级菜单的展开、收缩动画效果)...相关推荐
- Axure RP9——【导航栏二级菜单的展开效果】
导航栏二级菜单的展开效果 Navigation Bar · secondary menu Here's how I want things to unfold. 目录 导航栏二级菜单的展开效果 Nav ...
- WEB HTML 二级菜单 折叠展开菜单
WEB HTML 二级菜单 折叠展开 WEB,HTML,二级菜单,折叠展开 一.效果图: 二.==完整==代码: 三.声明 ==文章属于原创,如需引用请@作者,并注明出处!== WEB,HTML,二级 ...
- 页面展开收起php代码,纯CSS3实现移动端展开和收起效果的示例代码
本文介绍了纯CSS3实现移动端展开和收起效果的示例代码,分享给大家,具体如下: 展示效果: HTML代码 展开 收起 唧唧复唧唧,木兰当户织.不闻机杼声,惟闻女叹息.(惟闻 通:唯)问女何所思,问女何 ...
- vue 父链和子组件索引_Vue.js 学习笔记 第7章 组件详解
组件(Component)是Vue.js最核心的功能,也是整个框架设计最精彩的地方,当然也是最难掌握的. 本章将带领你由浅入深地学习组件的全部内容,并通过几个实战项目熟练使用Vue组件. 7.1 组件 ...
- android 展开收起功能,Android开发实现ListView点击展开收起效果示例
本文实例讲述了Android开发实现ListView点击展开收起效果.分享给大家供大家参考,具体如下: 废话不说先上效果: 实际上这是采用一个ExpandableListView实现的 布局文件很简单 ...
- vue 动态路由_Vue.js应用性能优化三
在上一篇Vue.js应用性能优化二中,我们学习了足够强大的模式,可以显着提高应用程序的性能 - 按照路由分割代码.虽然按照路由拆分代码非常有用,但在用户访问我们的站点后,仍然有很多内部代码不需要.在本 ...
- vue router 参数_Vue.js项目开发技术解析
Vue.js项目开发技术解析 一.Vue.js实例 在一个Vue.js工程中,用于显示内容最基层的实例称之为根实例.通过该实例可以进行页面或组件的更新和显示.对于项目本身而言,无论是什么样的页面,都要 ...
- cdn加载vue很慢_Vue.js 项目打包优化实践
首先上结果: 把常用的 Vue,router,vuex,axios 的 runtime 包拆分了出来,改为 cdn: 另外就是对于自己编写的业务代码进行分包,根据路由进行懒加载,可以较好的提高首屏加载 ...
- vue 懒人_Vue.js 中的实用工具方法【推荐】
收集日常开发中常用到的一些工具方法, 包含 vue 的公用过滤器.公用指令等 (PS: 懒人养成记) 公用自定义过滤器 import Vue from 'vue' import moment from ...
最新文章
- c#_Func和Action委托简介
- 西北工业大学 计算机学院王云岚,王云岚
- 不同php文件,不同文件构建PHP程序的正确方式
- HDU 1087 [Super Jumping! Jumping! Jumping!]动态规划
- PCFG中inside和outside算法详解
- 计算机多媒体制作三级证书,多媒体作品制作员(师)国家职业标准
- 软件开源许可协议简介
- html中如何淡化背景图片,Word2010如何去除图片背景
- 【欧拉计划第 1 题】3 或 5 的倍数 Multiples of 3 or 5
- 用python 打印等腰三角形
- 前端开发也要知道的 DNS
- 算法之狄克斯特拉算法
- pandas 如何把时间转成index_pandas 时间格式转换的实现
- 艾孜尔江在腾讯网上的影视作品
- mysql查询95031班人数_MySQL的查询练习 - osc_1ngzqx2h的个人空间 - OSCHINA - 中文开源技术交流社区...
- 微信小程序使用crypto.js加密解密
- 【模板】最小费用最大流
- Mysql - 知识图谱总览
- TPESD0502S4SOT-143工作电压5V用于高速线路保护的2线ESD保护二极管阵列管TPESD0502S4 USB端口和以太网端口保护TVS二极管阵列,低泄漏电流和箝位电压25V结电容1PF
- 代码改变生活-使用You-Get下载bilibili的视频【一】
热门文章
- python 图片背景前景分离_【绝了】用 Python 把朋友头像变表情包!
- Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...
- linux内核线程绑定到单个核,linux 将进程或者线程绑定到指定的cpu上
- LeetCode之两数之和
- Linux 程 序 员 失 业 警 告
- 12种NumpyPandas高效技巧
- 一个励志PM小哥哥的Java转型之路
- 从0到1构建美团压测工具
- 玩转算法值面试-第五章 -在链表中穿针引线
- 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型