react原生实现折叠面板

  1. 需求:已有点击展开和收起功能,需要让展开丝滑一些。

  1. 处理方式:动态改变 max-height:0;到max-height:固定值。

通过设置:overflow:hidden; 和 translation:height .3s;达成目的。

  1. 优点:解决面板内容是通过display:none到display:block变化时,我们不需要知道确切撑起高度,也能实现高度渐变。

  1. 缺点:展开很丝滑,收起很突然。一旦撑开,里边如果还有展开的话,就会hidden。处理中===

  1. 代码

   const [serDefHeight,setSerDefHeight] = useState('auto')    
   const changeDefCollapse = (showDefinition)=>{
        // 显示 或隐藏面板
        setShowDefinition(showDefinition)
        // 需要获取变化之后的scrollHeight为当前最大高度
        setTimeout(()=>{
            let height = serDefCollapseDom.current.scrollHeight
            setSerDefHeight(height+'px')
        },0)
    }
 <div  >
     <div   onClick={changeDefCollapse.bind(this,!showDefinition)}>
        这是头,点击头折叠内容
    </div>
     <div 
        ref={serDefCollapseDom} 
        className={styles.collapseContent}  
        style={{ 
            display: showDefinition ? 'block' : 'none' ,
            maxHeight:serDefHeight,
        }}
      >
         这是内容
     </div>
</div>
.collapseContent {
    transition: all 0.3s;
    overflow: hidden;
}

扩展:

已知需要折叠的高度时,可以 直接通过csss实现 https://blog.csdn.net/qq_40095973/article/details/106826065

transition 属性详解 https://blog.csdn.net/qq_43923146/article/details/127510036

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值