【发布时间】:2018-09-29 17:26:50
【问题描述】:
我是 reactjs 世界的新手。我有一个导航栏,距离顶部 100 像素。 当我向下滚动页面时,导航栏应该粘在顶部。
我的导航栏类代码是
export default class NavBar extends React.Component {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.state = {
isOpen: false
};
}
toggle() {
this.setState({
isOpen: !this.state.isOpen
});
}
render() {
return (
<div id="stickyheader">
<Navbar color="light" white expand="md">
<NavbarBrand href="/">
<ResizeImage
src={require('../image/logo.png')}
alt="logo"
options={{ width: 10 },{ height: 50 },{ mode: 'pad' }}
/>
</NavbarBrand>
<NavbarToggler onClick={this.toggle} />
<Collapse isOpen={this.state.isOpen} navbar>
<Nav className="ml-auto" navbar>
<NavItem>
<NavLink href="/components/">HOME</NavLink>
</NavItem>
<NavItem>
<NavLink href="#">ALL CARS</NavLink>
</NavItem>
<NavItem>
<NavLink href="#">RATES</NavLink>
</NavItem>
<NavItem>
<NavLink href="#">ABOUT US</NavLink>
</NavItem>
<NavItem>
<NavLink href="#"><FontAwesomeIcon icon="users" /> BECOME A PARTNER</NavLink>
</NavItem>
</Nav>
</Collapse>
</Navbar>
</div>
);
}
}
jquery 代码
$(function(){
// Check the initial Poistion of the Sticky Header
var stickyHeaderTop = $('#stickyheader').offset().top;
$(window).scroll(function(){
if( $(window).scrollTop() > stickyHeaderTop ) {
$('#stickyheader').css({position: 'fixed', top: '0px'});
$('#stickyalias').css('display', 'block');
} else {
$('#stickyheader').css({position: 'static', top: '0px'});
$('#stickyalias').css('display', 'none');
}
});
});
当我在 html 中使用时,此 jquery 代码运行良好。 我想问题是表明 id="stickyheader" 我提到了一些链接,但我没有找到合适的解决方案。请指导我解决这个问题。感谢您的进步。
【问题讨论】:
-
实现的一种方法是使用
ref,但您可以使用 jquery 库。比如npm i jquery然后import $ from 'jquery' -
@Revansiddh 我已经添加了使用 jquery 库。但请给出任何提示如何使用 ref insead 的 id
-
reactjs.org/docs/refs-and-the-dom.html。就像 div 中的
ref={this.myRef}和构造函数中的this.myRef = React.createRef();一样 -
我认为你应该考虑不使用 jQuery。当您提供的代码可以通过本机 javascript 轻松完成时,jQuery 只会增加捆绑文件下载大小的额外数据开销。但是如果你不想从头开始,有很多开源包可以做到这一点。例如:npmjs.com/package/react-sticky