我试图在桌面上添加onScroll
事件。这就是我尝试过的:
componentDidMount() {
ReactDOM.findDOMNode(this.refs.table).addEventListener('scroll', this.listenScrollEvent);
}
componentWillUnmount() {
ReactDOM.findDOMNode(this.refs.table).removeEventListener('scroll', this.listenScrollEvent);
}
listenScrollEvent() {
console.log('Scroll event detected!');
}
render() {
return (
<table ref="table">
[...]
</table>
)
}
我尝试了console.log(ReactDOM.findDOMNode(this.refs.table))
并且我得到了正确的结果,但滚动事件根本没有被触发。我查看here但仍然失败了。任何帮助都会非常感激。
答案 0 :(得分:8)
您需要将其绑定到上下文中的元素。
render() {
return (
<table ref="table" onScroll={this.listenScrollEvent.bind(this)}>
[...]
</table>
)
}
答案 1 :(得分:4)
您可以使用'
属性:
<a href="../admin/gambar/<?php echo $row['file']; ?>" class="btn btn-success" role="button" download>
以下是一个示例:https://jsfiddle.net/81Lujabv/
答案 2 :(得分:4)
我一直想做类似的事情。将事件侦听器而不是ReactDom添加到窗口中。findDOMNode对我有用...
componentDidMount() {
window.addEventListener('scroll', this.handleScrollToElement);
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScrollToElement);
}
handleScrollToElement(event) {
console.log('Fired ' + event)
}
答案 3 :(得分:0)
我一直在寻找解决这个问题的好方法。以下代码可以正常工作,其中侦听器仅位于特定的class / div 上: 反应版本为16.0.0
首次导入 ReactDOM,import ReactDOM from "react-dom";
class xyz extends Component
部分中然后
constructor(props) {
super();
this.state = {
vPos : 0
}
this.listenScrollEvent = this.listenScrollEvent.bind(this);
}
componentDidMount() {
ReactDOM.findDOMNode(this.refs.category_scroll).addEventListener('scroll', this.listenScrollEvent);
}
componentWillUnmount() {
ReactDOM.findDOMNode(this.refs.category_scroll).removeEventListener('scroll', this.listenScrollEvent);
}
listenScrollEvent(event) {
console.log('firee');
this.setState({
vPos: event.target.body.scrollTop
});
}
粘贴上述功能后,在render()
方法中,无论您想命名为ref
方法如何,都可以做到,确保 findDOMNode
中也使用了相同的名称,即findDOMNode(this.refs.category_scroll)
:
<div onScroll={this.listenScrollEvent} ref="category_scroll">
...
</div>
。
。
如果它是水平滚动,则event.currentTarget.scrollTop
在listenScrollEvent()函数中起作用。
答案 4 :(得分:0)
根据React文档(https://reactjs.org/docs/handling-events.html)
反应事件使用camelCase命名,而不是小写。 您可以像使用纯HTML一样设置属性。
HTML:
<div onclick="..." onscroll="...">
...
</div>
JSX:
<div onClick={...} onScroll={...}>
...
</div>
您应该创建一个具有固定高度的包装器块元素以启用滚动。
答案 5 :(得分:-1)
尝试一下,将.bind(this)
添加到this.listenScrollEvent
时将其传递给addEventListener
。
componentDidMount() {
ReactDOM.findDOMNode(this.refs.table).addEventListener('scroll', this.listenScrollEvent.bind(this));
}
componentWillUnmount() {
ReactDOM.findDOMNode(this.refs.table).removeEventListener('scroll', this.listenScrollEvent.bind(this));
}
listenScrollEvent() {
console.log('Scroll event detected!');
}
render() {
return (
<table ref="table">
[...]
</table>
)
}