当前位置: 首页 > news >正文

一个滚动框高度动态计算解决方案

需求描述,一个嵌套了很多层div或者其他标签的内容框,而它的外层没有设置高度,或者使用百分比,而本容器需要设置高度来实现滚动,要么写死px高度,但是不能自适应,此时需要一个直系父容器(该容器要动态计算高度)包裹,这里的解决方法是,设计一个高阶方法,用于给本容器增加一个计算高度的父容器,并且超出高度隐藏内容。

// 自定义高阶函数
// customizeHeightWrap.tsx"
import React, { useEffect, useState } from 'react';export const customizeHeightWrap = (MyComponent: React.ComponentType<any>, minusHeight?: number) => {
// MyComponent为需要包裹的组件,minusHeight为参照父组件高度需要减去的高度(得到要滚动的高度)return function(props:any) {const [customHeight, setCustomHeight] = useState(500);useEffect(() => {window.addEventListener('resize', () => getClientHeight()); getClientHeight(); return () => {// 移除监听window.removeEventListener('resize', getClientHeight);};}, [])const getClientHeight = () => {try {const clientHeight = document.documentElement.clientHeight; // document.body.clientHeightconst setHeight = clientHeight - (minusHeight || 0)setCustomHeight(setHeight);} catch (error) {}};return (<div className="customizeHeightWrap" style={{height: customHeight, overflowY: 'hidden'}}><MyComponent {...props} /></div>);};
}
// ScrollComponent.tsx 需要设置滚动的容器
import React, { useEffect, useState } from 'react';
import type { FC } from 'react';
import { customizeHeightWrap } from "@/components/customizeHeightWrap.tsx"
interface IProps = {
xxx: string;
...
}const ScrollComponent: FC<IProps> = (props) => {return (<div style={{height: '100%, overScrollY: 'scroll'}}>超出高度滚动:这里100%参照父容器:高阶方法提供的包裹父组件</div>);
}
export default customizeHeightWrap(ScrollComponent);
http://www.lryc.cn/news/134547.html

相关文章:

  • Android瀑布流
  • Ubuntu搭建CT_ICP里程计的环境暨CT-ICP部署
  • 微信小程序全局事件订阅eventBus
  • 华为云cce发布若依前后分离版:2.nginx镜像操作
  • TCP协议报文结构
  • Day14-2-NodeJS后端开发流程
  • 计算机竞赛 基于CNN实现谣言检测 - python 深度学习 机器学习
  • 框架(Git基础详解及Git在idea中集成步骤)
  • 0基础学习VR全景平台篇 第88篇:智慧眼-成员管理
  • DSO 系列文章(2)——DSO点帧管理策略
  • 无需公网IP——搭建web站点
  • swift 项目集成友盟推送
  • Unity之用Transform 数组加多个空物体-->简单地控制物体按照指定路线自动行驶
  • 交换机生成树STP
  • 3.微服务概述
  • cloud_mall-notes02
  • 前端轻松实现文件预览(pdf、excel、word、图片)
  • docker服务器、以及容器设置自动启动
  • k8s集群证书过期后,如何更新k8s证书
  • 5.6.webrtc三大线程
  • @Slf4j报错:Not generating field log: A field with same name already exists
  • 乖宝宠物上市,能否打破外资承包中国宠物口粮的现实
  • Ubuntu安装Apache+Php
  • open cv学习 (四)图像的几何变换
  • matlab 检测点云中指定尺寸的矩形平面
  • HCIP——STP配置案例
  • JCTools Mpsc源码详解(二) MpscArrayQueue
  • 前端面试的性能优化部分(13)每天10个小知识点
  • C++ STL无序关联式容器(详解)
  • Python爬虫解析工具之xpath使用详解