实现div的height从0到auto的过渡效果
  oioXonDbyv6Z 2023年11月02日 66 0


通过修改max-height打到高度自适应的过程。

展开状态

实现div的height从0到auto的过渡效果_javascript

收起状态

实现div的height从0到auto的过渡效果_javascript_02


一般场景描述需求(与项目业务无关):
需要完成一种过渡效果,即height是变化的,但不是数字到数字的变化,因为不知道展开之后的高度到底是多少?不确定!!!
然而我们知道,过渡效果height需要确定开始高度数字与结束数字才能体现出过渡效果,不然过渡属性不起作用。那么思路就是:通过js得到列表里子元素的个数项,以及子元素的高度,得到需要展示的整体高度,这样不多余也不缺少的将整体高度计算出来,不用估值。
我这里用maxHeight来完成的效果。
这里就用vue+ts的现场案例,以供参考

<div class="all-list">
      <div v-for="item in listData" :key="item.id">
        ********
      </div>
    </div>
@Watch('extend')//监视是否需要展开
    changeExtend(value){
      let fatherEle:any = document.querySelector('.all-list');//获取这里子元素的父元素dom
      let childlenght = fatherEle.children.length;//获取子元素的个数
      if(value && childlenght>0){//需要展开,并且子元素存在
        let childEle:any = document.querySelector('.all-list')?.children[0];//获取其中一个子元素dom
        let height:number = childEle.offsetHeight;//子元素dom的高度
        fatherEle.style.maxHeight = `${height*childlenght}px`//给父元素设置maxHeight,初始化的时候css样式里是的是maxHeight:0px
      }else{
        fatherEle.style.maxHeight = `0px`
      }
    }
.all-list{
	overflow: hidden;
	transition: all 0.6s;
	max-height: 0;
 }


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
oioXonDbyv6Z