我有ul
一个max-height
和overflow-y: auto
。
当用户输入足够多的li
元素时,ul
开始滚动,但我希望最后一个li
带有 的元素form
始终存在并且用户可以查看。
我试过实现一个scrollToBottom
看起来像这样的函数:
scrollToBottom() {
this.formLi.scrollIntoView({ behavior: 'smooth' });
}
但这只会ul
跳转到屏幕顶部,并将li
其中的表单显示为唯一可见的东西。
有没有更好的方法来实现这一点?我发现的答案往往有点旧并且使用 ReactDOM。谢谢!
CSS:
.prompt-box .options-holder {
list-style: none;
padding: 0;
width: 95%;
margin: 12px auto;
max-height: 600px;
overflow-y: auto;
}
HTML:
<ul className='options-holder'>
{
this.state.items.map((item, index) => (
<li key={item.id} className={`option ${index === 0 ? 'first' : ''}`}>
<div className='circle' onClick={this.removeItem} />
<p className='item-text'>{ item.text }</p>
</li>
))
}
<li key={0} className={`option form ${this.state.items.length === 0 ? 'only' : ''}`} ref={el => (this.formLi = el)}>
<div className='circle form' />
<form className='new-item-form' onSubmit={this.handleSubmit}>
<input
autoFocus
className='new-item-input'
placeholder='Type something and press return...'
onChange={this.handleChange}
value={this.state.text}
ref={(input) => (this.formInput = input)} />
</form>
</li>
</ul>