gpt4 book ai didi

javascript - 自动向下滚动到下一个列表组项目并在移动 View 的中心显示内容(React)

转载 作者:行者123 更新时间:2023-11-30 20:16:19 25 4
gpt4 key购买 nike

1) 我正在尝试自动滚动到列表组中的下一个项目。例如,如果用户回答了第一个问题,它应该自动滚动到第二个问题。 (React) 和 onSubmit 它应该滚动到第一个未回答的问题
2) 当用户在移动 View 中查看此列表时,YES 或 NO 单选按钮应显示在中心,同时提交和清除按钮 (BOOTSTRAP)
3) 如何知道从下拉列表中选择了哪个项目并将其显示在控制台中。

Code

最佳答案

有多种方法可以实现这一点。一种方法是通过“vanilla js”添加一个滚动到表单中项目的方法,然后在 onInputChangedonSubmut 方法中使用它。

您可以在组件中将此函数定义为:

  // Scrolls the list to a list item by list item index
scrollToItemByIndex = (index) => {

// Find the list item element (by index), and scroll wrapper element
const scrollItem = document.querySelector(`[scrollIndex="${ (index) }"]`)
const scrollWrapper = document.querySelector(`[scrollWrapper="scrollWrapper"]`)

if(scrollItem && scrollWrapper) {

// If list item found in DOM, get the top offset
const itemRect = scrollItem.offsetTop // [UPDATED]
const wrapperRect = scrollWrapper.offsetTop // [UPDATED]

// Scroll the wrapper to the offset of the list item we're scrolling to
scrollWrapper.scrollTo(0, itemRect - wrapperRect)
}
}

您的 onInputChange 函数可以更新如下:

 onInputChange = ({ target }) => {
const { cards } = this.state;
const { options } = this.state;

const nexState = cards.map((card, index) => {
if (card.cardName !== target.name) return card;

const options = card.options.map(opt => {
const checked = opt.radioName === target.value;
return {
...opt,
selected: checked
}
})

// [ADD] When input changes (ie something is set), scroll to next item
this.scrollToItemByIndex( index + 1 )

const style = options.every(option => !option.selected) ? 'danger' : 'info'

return {
...card,
style,
options
}
});
this.setState({ cards: nexState })
}

此外,您的 onSubmit 将更新为滚动到任何无效的表单项:

 onSubmit = () => {

this.state.cards.forEach((card, index) => {
var invalid = card.options.every(option => !option.selected)
if (invalid) {
card.style = 'danger'

// [ADD] this item has invalid input, so scroll to it
this.scrollToItemByIndex(index)

}
else {
card.style = 'info'
}
});

...
}

最后,您需要使用以下内容更新组件的渲染方法,以确保上述查询选择器正常运行:

<ul class="nav nav-pills nav-stacked anyClass" scrollWrapper="scrollWrapper">

和:

{cards.map((card, idx) => (<ListGroup bsStyle="custom" scrollIndex={idx}>
...
</ ListGroup >)}

[已更新] 可以在此处找到完整的工作示例: https://stackblitz.com/edit/react-z7nhgd?file=index.js

希望这对您有所帮助!

关于javascript - 自动向下滚动到下一个列表组项目并在移动 View 的中心显示内容(React),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com