vue 展开收起(高度不固定,还要有平滑的过渡效果)

本文介绍两种实现Vue折叠面板动画的方法:一是通过自定义过渡动画配合Velocity.js实现平滑的展开与收起效果;二是利用Element UI提供的折叠过渡组件简化开发过程。

找了好多案例都不是很顺滑,最终还是功夫不负有心人,找到了一个非常棒的案例,只是简单地尝试一下,以后使用可以在进行全面的封装来公共使用

方法一: 

<template>
  <div class="panelMain">
    <div class="panel">
      <!-- body -->
      <transition
        name="panel-fade"
        @enter="enter"
        @before-leave="beforeLeave"
        @leave="leave"
      >
        <div class="panel__body" v-show="ifShowBody" ref="panel__body_height">
          <slot>
               <div class="box"></div>
          </slot>
        </div>
      </transition>
      <!-- footer -->
      <div class="panel__footer" @click="iconClick">{
  
  {ifShowBody? '收起': '更多'}}</div>
    </div>
    <slot name="main">
        <div class="main" ref="main"></div>
    </slot>
  </div>
&l
你可以利用 `v-for` 指令来循环渲染版本列表,利用 `v-if` 指令来控制版本列表的展开收起状态。当展开状态时,使用 `transition` 过渡动画来实现卡片式的效果。 HTML代码: ```html <template> <div class="version-list"> <div class="version-item" v-for="(item, index) in versionList" :key="index" v-if="index < limit"> <!-- 版本信息 --> <div class="version-info"> <div class="version-name">{{ item.name }}</div> <div class="version-time">{{ item.time }}</div> </div> <!-- 版本描述 --> <div class="version-desc">{{ item.desc }}</div> </div> <!-- 展开收起按钮 --> <div class="more" v-if="versionList.length > limit" @click="toggleShow"> <span v-if="showMore">收起</span> <span v-else>更多</span> </div> </div> </template> ``` CSS代码: ```css .version-list { height: 150px; overflow: hidden; } .version-item { margin-bottom: 20px; background-color: #fff; border: 1px solid #ddd; padding: 10px; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); } .version-item:last-child { margin-bottom: 0; } .version-info { display: flex; justify-content: space-between; align-items: center; } .version-name { font-size: 16px; font-weight: bold; } .version-time { color: #999; } .version-desc { margin-top: 10px; font-size: 14px; line-height: 1.5; } .more { cursor: pointer; text-align: center; margin-top: 10px; } ``` JS代码: ```js export default { data() { return { versionList: [ { name: 'V1.0.0', time: '2022-01-01', desc: '这是版本 V1.0.0 的描述信息', }, { name: 'V1.0.1', time: '2022-01-02', desc: '这是版本 V1.0.1 的描述信息', }, { name: 'V1.0.2', time: '2022-01-03', desc: '这是版本 V1.0.2 的描述信息', }, { name: 'V1.0.3', time: '2022-01-04', desc: '这是版本 V1.0.3 的描述信息', }, { name: 'V1.0.4', time: '2022-01-05', desc: '这是版本 V1.0.4 的描述信息', }, ], limit: 3, // 初始展示的版本数量 showMore: false, // 是否展开状态 }; }, methods: { // 切换展开收起状态 toggleShow() { this.showMore = !this.showMore; }, }, }; ``` 其中,`versionList` 数组存储版本列表,`limit` 为初始展示的版本数量,`showMore` 为展开收起状态标识变量。 在模板中使用 `v-for` 指令循环渲染版本列表,利用 `v-if` 指令来控制版本列表的展开收起状态。当展开状态时,使用 `transition` 过渡动画来实现卡片式的效果。 展开收起按钮使用 `v-if` 指令来控制显示和隐藏,使用 `@click` 事件监听来切换展开收起状态。 最后,结合 CSS 样式,就可以实现点击更多展开卡片式、固定高度的版本列表的效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值