html使用antd的下拉框控件,看一看antd 中 select/dropdown 等组件的下拉框

本文介绍了在使用Ant Design(antd)的Select/Dropdown等组件时,如何解决下拉框不随滚动条滚动的问题。通过设置`getPopupContainer`属性,将下拉框渲染到相应滚动区域,实现下拉框跟随效果。同时,解析了antd下拉框组件的默认行为,包括在body中创建绝对定位的div以及计算left和top的值。文章提供了两种解决方案,一种是将下拉框组件直接放在Select组件下,另一种是找到一个相对于Select组件一起滑动的父组件作为下拉框的父节点。
摘要由CSDN通过智能技术生成

背景:在项目中使用 select 组件,点击 select 出现下拉框的状态时,滑动页面下拉框不跟随 select 组件滑动。也就是不固定在 select 组件的下方。

于是开始思考:

antd 是怎么实现下拉框的?下拉框跟随滚动是怎么做的?

先说解决办法吧:

查看API文档:

getPopupContainer: 菜单(下拉框哈)渲染父节点。默认渲染到 body 上,如果你遇到菜单滚动定位问题,试试修改为滚动的区域,并相对其定位。

getPopupContainer 接受一个函数作为参数,函数执行时会接受一个组件传给他的参数 triggerNode,返回菜单渲染的父节点。

所以可以设置:

getPopupContainer={(triggerNode) => triggerNode.parentNode}

这时候菜单渲染的父节点就是 antd 的 select 组件。

当然你可以设置为其他任意的节点为下拉框的父节点。但需要注意的是,下拉框是绝对定位的,要使滑动生效的话,最好父节点设置为相对定位(绝对定位也可,只是要注意与父节点同级的元素的位置关系)。否则下拉框会继续向上寻找定位不为 static 的元素,有可能就找到了 document.body 。起不到吸附的作用。

实现下拉组件的原理解析

在不设置 getPopupContainer 属性的时候,默认当第一次触发下拉框组件时,会在 body 节点下生成一个绝对定位的 div(下拉框的父节点):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值