我已经使用jquery实现了这个,但是想要创建一个响应的组件来做同样的事情
在我的页面页脚中
?
James Brierl.. 16
首先,我们需要跟踪页面,因为它在组件的状态下滚动.只有在安装组件时才会进行此跟踪.这可以这样做:
getInitialState: function() { return { scrollTop: 0 }; }, componentWillMount: function() { window.addEventListener('scroll', this.handleScroll); }, componentWillUnmount: function() { window.removeEventListener('scroll', this.handleScroll); }, handleScroll: function() { this.setState({scrollTop: $(window).scrollTop()}); },
注意:这仍然使用jQuery来获取当前滚动位置.没有jQuery就可以看到这个问题.
然后我们需要渲染组件:
scrollToTop: function() { $(window).animate({scrollTop: 0}, this.props.duration); }, render: function() { if (this.state.scrollTop < this.props.offset) { return null; } return ? }
这仍然是使用jQuery进行实际滚动.看看这个问题滚动没有jQuery.
如果您希望此组件淡入淡出,则应将其包装在一个ReactCSSTransitionGroup
并使用CSS动画.这在React文档中有记录.
这是一个JSFiddle演示.
首先,我们需要跟踪页面,因为它在组件的状态下滚动.只有在安装组件时才会进行此跟踪.这可以这样做:
getInitialState: function() { return { scrollTop: 0 }; }, componentWillMount: function() { window.addEventListener('scroll', this.handleScroll); }, componentWillUnmount: function() { window.removeEventListener('scroll', this.handleScroll); }, handleScroll: function() { this.setState({scrollTop: $(window).scrollTop()}); },
注意:这仍然使用jQuery来获取当前滚动位置.没有jQuery就可以看到这个问题.
然后我们需要渲染组件:
scrollToTop: function() { $(window).animate({scrollTop: 0}, this.props.duration); }, render: function() { if (this.state.scrollTop < this.props.offset) { return null; } return ? }
这仍然是使用jQuery进行实际滚动.看看这个问题滚动没有jQuery.
如果您希望此组件淡入淡出,则应将其包装在一个ReactCSSTransitionGroup
并使用CSS动画.这在React文档中有记录.
这是一个JSFiddle演示.
如果你想完全避免使用jQuery
var Example = React.createClass({ scrollUp: function () { var doc = document.documentElement; var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); if (top > 0) { window.scrollTo(0, top - 15) setTimeout(this.scrollUp, 10) } }, render: function () { return (); } });Page Header
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Up