我在使用react路由器导航时遇到滚动问题。
当我导航到另一个组件时,它会保持上次导航时的滚动位置。然而,我希望它恢复和开始从顶部每当导航被改变。
class App extends Component{
render() {
return(
<BrowserRouter onUpdate={() => window.scrollTo(0, 0)} history={createBrowserHistory()}>
<div style={{display: 'flex'}}>
<div className='navBar'>
<ul style={{listStyleType: 'none'}}>
<li><Link to='/'>Home</Link></li>
<li><Link to='/towns'>Towns</Link></li>
<li><Link to='/pubs'>Pubs</Link></li>
<li><Link to='/venues'>Venues</Link></li>
<li><Link to='/cinemas'>Cinemas</Link></li>
</ul>
</div>
<div style={{flex:1, padding:'0px'}}>
{routes.map((route) => (
<Route
key={route.path}
path={route.path}
exact={route.exact}
component={route.main}
/>
))}
</div>
</div>
</BrowserRouter>
)
}
}
然而,它不起作用。我有一种感觉,问题在于我的导航风格,而不是window.scrollTo()片段。
我使用React钩子的解决方案
import { useEffect, useRef } from 'react';
import { withRouter } from 'react-router-dom';
import PropTypes from 'prop-types';
const ScrollIntoView = ({ children, location }) => {
const prevLocation = useRef();
useEffect(() => {
if (prevLocation.current !== location.pathname) {
window.scrollTo(0, 0);
prevLocation.current = location.pathname;
}
}, [location]);
return children;
};
ScrollIntoView.propTypes = {
children: PropTypes.node,
location: PropTypes.object
};
export default withRouter(ScrollIntoView);
据我所知,由于react-router v4,Browser路由器
没有onUpdate
函数。
实现它的几种方法。这将是最简单的...
工作示例:https://codesandbox.io/s/7mr12q2wz6(向下滚动页面并单击链接)
组件/ScrollIntoView.js
import { PureComponent } from "react";
import { withRouter } from "react-router-dom";
class ScrollIntoView extends PureComponent {
componentDidMount = () => window.scrollTo(0, 0);
componentDidUpdate = prevProps => {
if (this.props.location !== prevProps.location) window.scrollTo(0, 0);
};
render = () => this.props.children;
}
export default withRouter(ScrollIntoView);
路线/索引。js
import React from "react";
import { BrowserRouter, Route, Switch } from "react-router-dom";
import Links from "../components/Links";
import Home from "../components/Home";
import About from "../components/About";
import Contact from "../components/Contact";
import ScrollIntoView from "../components/ScrollIntoView";
export default () => (
<BrowserRouter>
<div>
<ScrollIntoView>
<Links />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
</Switch>
<Links />
</ScrollIntoView>
</div>
</BrowserRouter>
);
或者您可以在这里找到另一种方法:在react中渲染后滚动到页面顶部。js
本文向大家介绍jQuery 顶部导航跟随滚动条滚动固定浮动在顶部,包括了jQuery 顶部导航跟随滚动条滚动固定浮动在顶部的使用技巧和注意事项,需要的朋友参考一下
本文向大家介绍JS滚动到指定位置导航栏固定顶部,包括了JS滚动到指定位置导航栏固定顶部的使用技巧和注意事项,需要的朋友参考一下 最近整理一下之前做的一个项目,把滚动条动态固定顶部的代码整理出来和大家分享,上代码 以上所述是小编给大家介绍的JS滚动到指定位置导航栏固定顶部,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
顶部 tab,当需要在页面顶部展示 tab 导航时使用,实现这个效果主要有两个地方要注意一下: 顶部点击后有颜色的改变以及有过度效果 顶部点击后下面对应部分也要发生改变 示例代码如下: <template> <div class="page"> <div class="page__bd"> <div class="weui-tab"> <div class=
我试图让我的导航栏在滚动时从透明背景变为黑色背景。与此模板类似:https://www.templatemonsterpreview.com/demo/58900.html?_gl=1*vx82om*\uGA*MTC0odazmti4xNJI3NTCxNdQW*\uGA\uFTPyEGT5LY*MTYyNzYwNzQ4Mi40LjEuMTYyNzYwODA2NC40Nw。。 这是我的html: 这
问题内容: 这是我的onCreate,它处理适配器,LinearLayoutManager等。我尝试了每个选项以尝试将其滚动到顶部,但不能。我什至尝试创建自己的自定义LinearLayoutManager。 问题答案: 您尝试过还是? RecyclerView不会在其中实现任何滚动逻辑,而是更加具体,它会根据实现的布局转到特定的索引,在您的情况下是线性的。
我有两个脚本在我的网站上只有,他们单独工作,他们一起没有...什么他们我错过了这里? 第一个脚本: 第二个脚本: 我不明白他们为什么不一起工作