全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2024-05-24_我为展开收起功能做了动画,被老板称赞!

您的位置:首页 >> 新闻 >> 行业资讯

我为展开收起功能做了动画,被老板称赞! 点击关注公众号,“技术干货”及时达! 需求简介这几天接了个新项目,需要实现下图中左侧边栏的菜单切换。这种功能其实就是一个「折叠面板」,实现方式多种多样。 实现上面的功能,无非就是一个「v-show」的事儿,但没有过渡,会显得非常生硬。想添加一些过渡效果, ?最简单的就是使用element ui、或者ant的折叠面板组件了。但可惜的是,我们的项目不能使用任何第三方组件库。 ?为了做好产品,我还是略施拳脚,实现了一个简单且丝滑的过渡效果: 「老板看后,觉得我的细节处理的很好,给我一顿画饼,承诺只要我好好坚持,一定可以等到升职加薪」!当然,我胃口小,老板的饼消化不了。我还是分享一下自己在不借助第三方组件的情况下,如何快速的实现这样一个效果。 技术实现方案业务分析仔细观察需求,我们可以分析出其实动画主要是两个部分:「一级标题的箭头旋转」和「二级标题区域的折叠展开」。 我们先实现一下基本的html结构: template divclass="nav-bar-content" divclass="header-wrap"@click="open=!open" spanclass="text"自动化需求计算条件输如/span spanclass="arrow" /span /div divv-show="open"class="content" p算法及跃变计算条件/p p空间品质判断条件/p p需求自动计算条件/p p通风系统/p /div /div /template scriptsetup constopen=ref(false); /script 上述代码非常简单,点击一级标题时,更改open的值,从而实现二级标题的内容区域展示与隐藏。 箭头旋转动画实现箭头旋转动画其实非常容易,我们只要在红色面板展开时,给箭头添加一个新的类名,在这个类名中做一些动画处理即可。 template divclass="header-wrap"@click="open=!open" spanclass="text"自动化需求计算条件输如/span spanclass="arrowflex-be-ce":class="{open:open}" /span /div /template stylelang="less"scoped .arrow{ width:16px; height:16px; cursor:pointer; margin-left: transition:transform0.2sease; } .open{ transform:rotate(90deg); transition:transform0.2sease; } /style 上述的代码通过 CSS 的transform 属性和动态绑定open类名实现了箭头的旋转效果。 ?注意:arrow也需要定义过渡效果 ?折叠区域动画效果要实现折叠区域的动画效果,大致思路和上面一样。 使用vue的transition组件实现借助vue的transition组件,我们可以实现折叠区域进入(v-show='true')和消失(v-show='fasle')的动画。一种可行的动画方案就是让面板进入前位置在y轴-100%的位置,进入后处于正常位置。 template divclass="nav-bar-content" divclass="header-wrap"@click="open=!open" spanclass="text"自动化需求计算条件输如/span spanclass="arrow":class="{open:open}" /span /div divclass="content-wrap" Transition divv-show="open"class="content" p算法及跃变计算条件/p p空间品质判断条件/p p需求自动计算条件/p p通风系统/p /div /Transition /div /div /template scriptsetup constopen=ref(false); /script stylelang="less"scoped .v-enter-active, .v-leave-active{ transition:transform0.5sease; } .v-enter-from, .v-leave-to{ transform:translateY(-100%); } /style 上述效果有一点瑕疵,就是出现位置把一级标题盖住了,我们稍微修改下 divclass="content-wrap" Transition divv-show="open"class="content" p算法及跃变计算条件/p p空间品质判断条件/p p需求自动计算条件/p p通风系统/p /div /Transition /div .content-wrap{ overflow:hidden; } 使用动态类名的方式实现效果好很多!但这种效果和第三方组件库的效果不太一致,我们以element的折叠面板效果为例: 我们可以发现,它的这种动画,是折叠面板的高度从0逐渐增高的一个过程。所以最简单的就是,如果我们知道折叠面板的高度,一个类名就可以搞定! template divclass="nav-bar-content" divclass="header-wrap"@click="open=!open" spanclass="text"自动化需求计算条件输如/span spanclass="arrowflex-be-ce":class="{open:open}" /span /div divclass="content-wrap":style="{height:open?'300px':0}" divclass="content" p算法及跃变计算条件/p p空间品质判断条件/p p需求自动计算条件/p p通风系统/p /div /div /div /template scriptsetup constopen=ref(false); /script stylelang="less"scoped .content-wrap{ height:0; transition:height0.5sease; } /style 如果这个折叠面板的内容通过父组件传递,高度是动态的,我们只需要使用js计算这里的高度即可: template divclass="nav-bar-content" divclass="header-wrap"@click="open=!open" spanclass="text"自动化需求计算条件输如/span spanclass="arrowflex-be-ce":class="{open:open}" /span /div divclass="content-wrap":style="{height:open?'300px':0}" divclass="content"ref="contentRef" slot/slot /div /div /div /template scriptsetup constopen=ref(false); constcontentRef=ref(); constheight=ref(0); onMounted(()={ height.value=contentRef.value.offsetHeight+'px'; }); /script stylelang="less"scoped .content-wrap{ height:0; transition:height0.5sease; } /style 这样,我们就通过几行代码就实现了一个非常简单的折叠面板手风琴效果! 总结要想实现一个折叠面板的效果,最简单的还是直接使用第三方组件库,但是如果项目不能使用其他组件库的话,手写一个也是非常简单的!也希望大家能在评论区给出更好的实现方式,供大家学习! 点击关注公众号,“技术干货”及时达! 阅读原文

上一篇:2025-03-14_30个常用的DeepSeek提问技巧(附详细示例),建议收藏! 下一篇:2023-05-04_专访《闲鱼经营图鉴》,一个期期让人上头的IP

TAG标签:

20
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价