vue折叠面板的收缩动画效果,实现点击按钮展开和收起,并有个高度过渡的动画效果
1.上面是点击的部分,可自定义,下面是我项目的内容部分,下面的代码是功能部分的代码,去掉了不必要的部分记录。
代码:这部分,要注意的是样式。
<ul class="newslist"> <li v-for="(items, index) in proLists" :key="index"> <p @click="openFunc(index)"> <img src="/static/svg/tbm.svg" alt=""> <span>{{items.name}}</span> </p> <div class="p" ref="liCon"> <div> 测试111 </div> </div> </li> </ul>
样式部分,内容部分需要有个高度展开收起的动画效果:
// 内容部分 .newslist>li>div{ height: 0px; overflow: hidden; transition: height .3s; // 动画效果 }
2.data的部分,
data () { return { liConHeight: 0, // 折叠面板内容初始高度 proLists: [ { name: '测试1', }, { name: '测试2', }, ], } }
3.js部分
// 项目折叠面板动画 openFunc (i) { const liCon = this.$refs.liCon[i] let height = liCon.offsetHeight if (height === this.liConHeight) { // 展开 liCon.style.height = 'auto' height = liCon.offsetHeight liCon.style.height = this.liConHeight + 'px' // eslint-disable-next-line no-unused-vars let f = document.body.offsetHeight // 必加 liCon.style.height = height + 'px' } else { // 收缩 liCon.style.height = this.liConHeight + 'px' }
备注:
如果需要手风琴的样式,每次点击只展开一个面板,循环proLists数据,除了当前的liCon,把其他的liCon的liConHeight高度设置为0即可。