我有一个包含<div />
元素的外部父<Table />
容器。我希望能够在父<Table />
元素的onWheel
事件上滚动<div />
,即使鼠标当前不在<Table />
上也是如此。
我有一个表元素的参考和一个事件处理程序,它正在侦听onWheel事件,但是我无法弄清楚如何将该事件转发到表中。
答案 0 :(得分:1)
我做了codePen illustrating a scroll redirection
这将在父wheelEvent
(红色背景的那个)上收听<div>
,禁用默认滚动行为(evt.preventDefault()
),然后设置scrollTop
的{{1}}位置另一个<div>
。
这是组件代码:
class RedirectScroll extends React.Component {
parentOnScroll = (evt) => {
evt.preventDefault();
const scrollTo= (evt.deltaY) + this.box.scrollTop;
this.box.scrollTop = scrollTo;
}
render() {
return (
<div className="parent" onWheel={this.parentOnScroll}> // Listen scrolls on this div
<div className="scrollablebox" ref={(box) => this.box = box}>
// Some content
</div>
</div>
);
}
}
我希望这就是你要找的东西。
答案 1 :(得分:1)
因为我猜你想要滚动表体,你可以试试这个。
class Table extends React.Component {
constructor() {
super();
this.callback = this.callback.bind(this);
this.body = null;
}
callback(ev) {
this.body.scrollTop += ev.deltaY;
}
render() {
return <div onWheel={this.callback}>
<table>
<tbody ref={c => this.body = c}>
{[1, 2, 3, 4, 5, 6,].map(i => <tr>
<td>{i}</td>
</tr>)}
</tbody>
</table>
</div>;
}
}
ReactDOM.render(<Table />, document.getElementById('root'));
&#13;
tbody {
display: block;
height: 3rem;
overflow: scroll;
}
tr:nth-child(2n+1) {
background-color: #ddf;
}
tr:nth-child(2n) {
background-color: #eef;
}
table {
margin: auto;
border-collapse: collapse;
}
td {
width: 5rem;
text-align: center;
font-family: sans-serif;
color: #00f;
}
div {
width: 100%;
display: block;
text-align: center;
background-color: #99f;
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
&#13;