描述
我正在尝试制作一个选择性列表,当您单击其中的某个元素时,它应该平滑地移动到中心。我正在尝试使用溢出和滚动条来实现这一点。
const divScrollPicker = document.querySelector(`div#scroll-picker`);
divScrollPicker?.querySelectorAll(`button`).forEach((button, index) => {
button.addEventListener(`click`, event => button.scrollIntoView({ behavior: `smooth`, block: `center` }));
});
body {
position: fixed;
inset: 0;
max-width: 100vmin;
margin-inline: auto;
display: grid;
grid-template-columns: 1fr 2fr;
grid-template-rows: auto;
align-content: center;
}
div#scroll-picker {
display: flex;
flex-direction: column;
max-height: 30px;
overflow-y: visible;
scroll-snap-type: y mandatory;
scroll-snap-align: center;
scroll-padding: 0;
&>* {
min-height: 100%;
max-height: 100%;
}
}
div#scroll-picker,
div#picker-container {
border: 1px solid black;
}
<div id="scroll-picker">
<button type="button" title>Button 1</button>
<button type="button" title>Button 2</button>
<button type="button" title>Button 3</button>
<button type="button" title>Button 4</button>
<button type="button" title>Button 5</button>
<button type="button" title>Button 6</button>
<button type="button" title>Button 7</button>
<button type="button" title>Button 8</button>
</div>
<div id="picker-container"></div>
问题
- 为了让元素滑动,我必须启用滑块,即
overflow: scroll
或auto
。 - 如果我启用滑块,则不会显示块之外的元素。
- 如果块外的元素未显示,我无法单击它们以使它们滑动到中心。
我仍然找不到摆脱这个恶性循环的方法。
问题
你有解决办法吗?
或者你能建议另一种方式吗?
解决方案
使用填充的解决方法: