gpt4 book ai didi

javascript - 在 React 中使用键盘上/下箭头键滚动?

转载 作者:行者123 更新时间:2023-12-03 13:58:34 25 4
gpt4 key购买 nike

我有一个自定义列表框,一个包含其他 div 子级的垂直列表的 div 。我想添加向上/向下箭头键导航来更改当前选择的子项。

因此,当我单击第一个项目并按向下箭头键时,它应该允许我选择第二个项目(以下项目)。如果我单击向上箭头键,它应该选择回第一项(上一项)。

const renderInboxSummary = targetDetailsData.map((todo, index) => {
const hasNewMessageInd = todo.hasNewMessageInd;
return (
<div onClick={() => this.handleClick(targetDetailsData, todo.aprReference, index)}>
<div>
{todo.aprRecordUserName}
</div>
<div>
{todo.aprBranchCode}
</div>
<div>
{todo.aprScreeName}
</div>
</div>
);
});

每个div都有一个点击事件处理程序this.handleClick(targetDetailsData, todo.aprReference, index)

Enter image description here

最佳答案

这可以通过在 ReactJS 中使用 ref 来完成,然后为 keydown 事件添加事件监听器,然后将焦点移动到下一个或上一个同级。

注释

  • 我为每个 div 添加了 tabindex 属性,以便让它们得到关注
  • 我在包装元素上使用 ref 来监听 keydown
  • 我检查keycode向上/向下移动到下一个/ previous sibling
  • 我相信全尺寸键盘上向上/向下的键码是不同的,但我没有可以测试的。

解决方案

要测试演示,请单击任意 div,然后使用向上/向下箭头

const { Component } = React;

class App extends Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
componentDidMount() {
this.moveFocus();
}
moveFocus() {
const node = this.myRef.current;
node.addEventListener('keydown', function(e) {
const active = document.activeElement;
if(e.keyCode === 40 && active.nextSibling) {
active.nextSibling.focus();
}
if(e.keyCode === 38 && active.previousSibling) {
active.previousSibling.focus();
}
});
}
render() {
return (
<div ref={this.myRef}>
<div tabindex="0">First</div>
<div tabindex="1">Second</div>
<div tabindex="2">Third</div>
</div>
)
}
}

ReactDOM.render(<App />, document.getElementById('root'));
div:focus {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>

文档

https://reactjs.org/docs/refs-and-the-dom.html

https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex

关于javascript - 在 React 中使用键盘上/下箭头键滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53931389/

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