我有个问题,我不知道怎么解决。
在我的react组件中,我在底部显示了一个很长的数据列表和一些链接。
点击任何链接后,我在列表中填充了新的链接集合,需要滚动到顶部。
问题是-如何滚动到顶部后,新的集合呈现?
'use strict';
// url of this component is #/:checklistId/:sectionId
var React = require('react'),
Router = require('react-router'),
sectionStore = require('./../stores/checklist-section-store');
function updateStateFromProps() {
var self = this;
sectionStore.getChecklistSectionContent({
checklistId: this.getParams().checklistId,
sectionId: this.getParams().sectionId
}).then(function (section) {
self.setState({
section,
componentReady: true
});
});
this.setState({componentReady: false});
}
var Checklist = React.createClass({
mixins: [Router.State],
componentWillMount: function () {
updateStateFromProps.call(this);
},
componentWillReceiveProps(){
updateStateFromProps.call(this);
},
render: function () {
if (this.state.componentReady) {
return(
<section className='checklist-section'>
<header className='section-header'>{ this.state.section.name } </header>
<Steps steps={ this.state.section.steps }/>
<a href=`#/${this.getParams().checklistId}/${this.state.section.nextSection.Id}`>
Next Section
</a>
</section>
);
} else {...}
}
});
module.exports = Checklist;
如果所有人都想做一些简单的事情,这里有一个解决方案,对每个人都适用
添加这个迷你函数
scrollTop()
{
window.scrollTo({
top: 0,
behavior: "smooth"
});
}
从页脚调用函数,如下所示
<a className="scroll-to-top rounded" style={{display: "inline"}} onClick={this.scrollTop}>TOP</a>
如果你想添加漂亮的样式,这里是CSS
.scroll-to-top {
位置:固定;
右:1快速眼动;
底部:1快速眼动;
显示:没有;
宽度:2.75快速眼动;
高度:2.75快速眼动;
text-align:中心;
颜色:# fff;
背景:rgba(90,92,105,0.5);
行高:46 px;
}
我有一段时间也有同样的问题。添加窗口。scrollTo(0,0);到每个页面都是痛苦和冗余的。所以我添加了一个HOC,它将包装我所有的路由,它将留在BrowserRouter组件:
<ScrollTop>
<Routes />
</ScrollTop>
在ScrollTopComponent内部,我们有以下内容:
import React, { useEffect } from "react";
import { useLocation } from "react-router-dom";
const ScrollTop = (props) => {
const { children } = props;
const location = useLocation();
useEffect(() => {
window.scrollTo(0, 0);
}, [location]);
return <main>{children}</main>;
};
export default ScrollTop;
这段代码将导致滚动的平滑行为:
<div onClick={() => {
ReactDOM.findDOMNode(this.headerRef)
.scrollIntoView({behavior: "smooth"});
}}
className='go-up-button' >
</div>
你可以在scrollIntoView()中传递其他参数
可以使用以下语法:
element.scrollIntoView();
element.scrollIntoView(alignToTop); // Boolean parameter
element.scrollIntoView(scrollIntoViewOptions); // Object parameter
alignToTop可选
为布尔值:
If true, the top of the element will be aligned to the top of the visible area of the scrollable ancestor. Corresponds to scrollIntoViewOptions: {block: "start", inline: "nearest"}. This is the default value.
If false, the bottom of the element will be aligned to the bottom of the visible area of the scrollable ancestor. Corresponds to scrollIntoViewOptions: {block: "end", inline: "nearest"}.
scrollIntoViewOptions可选
是具有以下属性的对象:
*behavior* Optional
Defines the transition animation.
One of "auto", "instant", or "smooth". Defaults to "auto".
*block* Optional
One of "start", "center", "end", or "nearest". Defaults to "center".
*inline* Optional
One of "start", "center", "end", or "nearest". Defaults to "nearest".
更多细节可以在这里找到:MDN文档
如果所有人都想做一些简单的事情,这里有一个解决方案,对每个人都适用
添加这个迷你函数
scrollTop()
{
window.scrollTo({
top: 0,
behavior: "smooth"
});
}
从页脚调用函数,如下所示
<a className="scroll-to-top rounded" style={{display: "inline"}} onClick={this.scrollTop}>TOP</a>
如果你想添加漂亮的样式,这里是CSS
.scroll-to-top {
位置:固定;
右:1快速眼动;
底部:1快速眼动;
显示:没有;
宽度:2.75快速眼动;
高度:2.75快速眼动;
text-align:中心;
颜色:# fff;
背景:rgba(90,92,105,0.5);
行高:46 px;
}