转发父母onWheel到滚动表

问题描述 投票:4回答:2

我有一个包含<div />元素的外部父级<Table />容器。我希望能够在父<Table />元素的onWheel事件上滚动<div />,即使鼠标当前不在<Table />上。

我有一个表元素的参考和一个事件处理程序监听onWheel事件,但我还没有弄清楚如何将该事件转发到表。

reactjs react-virtualized
2个回答
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'));
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;
}
<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>

1
投票

我做了一个codePen illustrating a scroll redirection

这将听父亲wheelEvent(具有红色背景的那个)的<div>,禁用默认滚动行为(evt.preventDefault())然后设置另一个scrollTop<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>
        );
    }
}

我希望这就是你要找的东西。

© www.soinside.com 2019 - 2024. All rights reserved.