bounty还有6天到期。回答此问题可获得+50声望奖励。manish thakur正在寻找规范答案。
我正在处理一个小部分,我必须水平显示一些divs
,所以当它超出空间时,我使用css作为overflow-x:auto
,以便它可以滚动。
我所做的
<div className="App d-flex">
{data.map((li) => {
return (
<div key={li.id} className="boxes">
{li.name}
</div>
);
})}
</div>
下面是我的CSS
.d-flex {
display: flex;
}
.boxes {
padding: 12px;
margin: 4px;
background-color: rgb(196, 218, 243);
min-width: 150px;
overflow-x: auto;
text-align: center;
border-radius: 6px;
}
"我想做的事"
- 我想把点在那里,以便当用户点击点它应该滚动。
- 只有当超过项目的数量时,点才应该触发,这意味着如果在一个屏幕上可以显示的项目较少,则没有点,否则是点。
- 在这里,我不知道如何使用react-hooks来做到这一点。
2条答案
按热度按时间a5g8bdjr1#
先解决问题,然后编码。
解决方案
观察容器div、第一个框的div和最后一个框的div,并相应地更改UI。
保留布尔值(简单变量就可以了,不需要状态),通过与容器比较(是否粘滞)来检查左按钮和右按钮是否可见。
Code(idea)
使用
ref
获取DOM节点(而不是document.getElem...
)。使用myRef.current.getBoundingClientRect()
获取它们的位置和尺寸。伪代码:
当然,您需要添加按钮、
overflow
、max-width
属性和onClick scroll。PS:
ref
的一个目的是作为document.getElementById
的替代品。5ssjco0h2#
将
App
容器div的宽度设置为max-content
,以允许该div溢出其父div。您可以从CSS中删除overflow-x: auto
行,因为它没有做任何事情。该属性需要在溢出的容器上设置,在本例中是窗口。窗口默认显示水平滚动条。使用Resive Observer API监听可滚动容器或App容器何时调整大小。在下面的示例中,我使用窗口作为可滚动容器,但我观察文档主体,因为您无法直接观察窗口。
然后就只需要比较App容器的宽度和可滚动容器的宽度了,你可以设置一个状态变量来决定是否显示圆点。
片段示例
Stackblitz Typescript示例
https://stackblitz.com/edit/react-ts-kkpugp?file=App.tsx
我假设你想让window成为可滚动元素。如果你想让一个不同的父元素成为可滚动元素,那么将 *parent的 *
overflow-x
设置为auto
,并观察它而不是文档正文。然后你可以将App
容器的宽度与该父元素的宽度进行比较,而不是window。