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 与其它逻辑)

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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何评判软件测试的效率,如何衡量测试效率,提高测试效率?

“根据系统测试发现缺陷数来衡量测试人员的系统测试效率,测试执行效率”,这种方法是很片面的。它的优点是便于统计和分析,缺点是只通过一个方面考核了测试效率等,漏掉了很多其他因素。那么该如何衡量测试人员的测试效率呢&#xf…

Java -- 异常的捕获及处理 -- 范例 -- throw与throws的应用

7.2.3 范例 -- throw与throws的应用 例:综合应用 Class : Math package limeThrowable._7_2_3;public class Math {public int div(int i, int j) throws Exception { //方法可以不处理异常System.out.println("******计算开始******")…

深度揭秘硅片产业,巨大潜力成就半导体材料之王

来源:智东西硅片是半导体材料的基石,它是先通过拉单晶制作成硅棒,然后切割制作成的。由于硅原子的价电子数为4,序数适中,所以硅元素具有特殊的物理化学性质,可用在化工、光伏、芯片等领域。特别是在芯片领域…

fiddler如何filter_Fiddler工具的过滤功能介绍

Fiddler工具过滤功能介绍如图是过滤功能界面1.Actions:意思是动作的意思,也就是要做什么操作,里边包含有几个选项:Run Filterset now :马上执行过滤Load Filterset: 加载本地过滤设置文件Save Filterset :保…

vr软件测试,如何进行VR可用性测试?

本文主要介绍如何进行VR可用性测试以及其与其他平台的测试有什么不同,帮助VR产品相关设计者快速进行可用性测试,提升产品质量及体验。一、可用性测试是什么简单说,可用性测试就是在不知道或者想确认产品问题点的情况下,通过用户测…

node.js JS对象和JSON字符串之间的转换

JSON.stringify(obj)将JS对象转为字符串。 var json { aa: [sdddssd], bb: [ 892394829342394792399, 23894723984729374932874 ], cc: [11111111111111] }> var string JSON.stringify(json) string: {"aa":["sdddssd"],"bb":["892…

短信升级为5G消息?三大运营商联合发布的《5G消息白皮书》说了啥?

来源:帮尼资讯5G时代来临,基础消息服务迎来全新变革。4月8日上午10时许,中国电信、中国移动、中国联通联合举行线上发布会,发布《5G消息白皮书》。《5G消息白皮书》的发布,意味着三大运营商齐推出与以往短信完全不同的…

计算机会考咋查成绩,2019会考成绩查询网址入口 高中会考怎么查成绩

会考是高中生们在参加高考之前的一道基础的考试环节,只有通过了会考的考生才有资格参加高考。下文有途网小编给大家整理了会考成绩的查询入口及查询方式,供参考!会考成绩查询网址及查询方式普通高中的会考成绩也就是学业水平考试的成绩&#…

疫情影响全景图:疫情对各行业短中期影响!

来源: 中智科博海外大厂纷纷宣布停产,美国单周失业人数创新高。疫情使得海外大厂纷纷宣布停产,已宣布停产计划的知名企业涉及汽车、半导体、消费电子、飞机制造、奢侈品等行业,关联地区包括北美、欧洲、印度、东南亚等。美国三大汽…

Android App内存优化之图片优化

不要将Button的背景设置为selector 在布局文件和代码中,都可以为Button设置background为selector,这样方便实现按钮的正反选效果,但实际跟踪发现,如果是将Button的背景设置为selector,在初始化Button的时候会将正反选图…

sql加上唯一索引后批量插入_MySQL当批量插入遇上唯一索引

一、背景以前使用SQL Server进行表分区的时候就碰到很多关于唯一索引的问题:Step8:SQL Server 当表分区遇上唯一约束,没想到在MySQL的分区中一样会遇到这样的问题:MySQL表分区实战。今天我们来了解MySQL唯一索引的一些知识&#x…

我们为什么要探索人脑的奥秘?

来源:脑科学与智能技术卓越创新中心 4月5日21:30,4月11日9:00,CCTV-2央视财经频道《中国经济大讲堂》特邀中国科学院脑科学与智能技术卓越创新中心学术主任蒲慕明院士深度解读《我们为什么要探索人脑的奥秘?》未来智能实验室的主要…

pc计算机中ram的编址单位,字母编址

对于CPU而言,如果它要发数据到某个设备,其实是发到对应的接口,接口电路里有多个寄存器(也称为端口),访问设备实际上是访问相关的端口,所有的信息会由接口转给它的设备。那么CPU会准备数据发送到数据总线,但…

DuiVision开发教程(19)-菜单

DuiVision菜单类是CDuiMenu。有两种显示的位置,一种是在窗体顶部某个button点击后能够下拉一个菜单,还有一种是托盘图标的右键菜单。 窗体中的菜单定义方式是xml文件里设置某个button的action属性,以menu:开头。后面是菜单的XML文件名称或XM…

python多线程操作列表_详解Python多线程下的list

list 是 Python 常用的几个基本数据类型之一.正常情况下我们会对 list 有增删改查的操作,显然易见不会有任何问题.那么如果我们试着在多线程下操作list 会有问题吗?多线程下的 list安全 or 不安全? 不安全!通常我们说的线程安全是指针对某个数据结构的所…

值得收藏!深度报告解读NB-IoT

来源:物联传媒2019年NB-IoT行业获得了快速发展,用户数有望较2018年提升3倍以上,预计随着2020年基站数的大幅提升,为行业发展提供更进一步的支撑,加速技术成熟度提升,用户数有望保持快速增长。NB-IoT是万物互…

我的世界中国版服务器无限夜视,我的世界服务器游戏技巧 无限夜视的方法

来源:游戏园日期:2019-06-12 04:03:49我的世界服务器游戏技巧 无限夜视的方法。那下面给大家分享的是一些大家可能不知道的游戏技巧,那下面就一起来看看都是些什么技巧吧!对了,里面还有关于服务器无限夜视的方法哦&…

澳洲虚拟主机空间_澳洲空间|澳洲虚拟主机|澳洲主机|澳洲虚拟空间-万纵科技 www.xmwzidc.cn...

澳洲虚拟主机主要应用于外贸美洲的澳洲网站空间:澳洲联邦共和国是拉丁美洲最大的国家,人口数居世界第五,面积居世界第五。其国土位于中南美洲与大西洋之间,面积为世界第五大,仅次于俄罗斯、澳洲、美国与中国,与乌拉圭、…

Oracle锁表查询和解锁方法

数据库操作语句的分类 DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert、delete、updateDCL:数据库控制语言 ,关键字:grant、removeDQL&#xff1a…

揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活

来源:世界人工智能大会 AI 和 5G 与机器人技术结合,正在不断催生新的消费电子品类。AI 解决机器理解世界,以及人机交互的问题。5G 拓展机器人的活动边界,并为机器人提供更大的算力和存储空间(云协作机器人)…