javascript - 当元素存在时对元素做出反应
问题描述
导航到页面后,我试图滚动到长列表中的元素,但是该元素不会立即呈现,因此起初没有可滚动的内容。我尝试了三种结果不一致或缓慢的方法:
- 超时后滚动到 ref'd 元素
- 在要滚动到的元素内创建一个 div,将 ref 传递到该 div 并在 mount 时调用一个函数以滚动到它。
- 1和2的组合
我曾考虑对元素的存在进行某种轮询,但出于某种原因,这感觉有点脏。
任何人都有更好的解决方案,它是一致的,并且不会导致滚动前的等待时间超过必要的等待时间?
解决方案
要将浏览器的焦点放在渲染后的可滚动元素上,您必须考虑几件事。
您应该为您的元素提供一个 tabindex 属性,并且您必须将其设置为“-1”,如下所示。
<div tabIndex="-1">
Your content.
</div>
使用 React “ref”,而不是查询 DOM。
constructor(props) {
super(props);
this.myRef = React.createRef();
}
render() {
return (
<div
tabIndex="-1"
ref={this.myRef} >
Your content.
</div>
);
}
将焦点放在 componentDidMount 生命周期函数上。
componentDidMount() {
window.scrollTo(0, this.myRef.current.offsetTop);
}
推荐阅读
- dart - 如何在 Bloc 模式中使用 SharedPreferences?
- angular - 如何使用 *ngIf 指令更改图像?
- python - Darkflow:为什么我得到有损/不完整的输出图像(我用自己的数据训练)
- c++ - 手写 LALR(1) 解析器,导航表格
- php - 编码一个url以在php中检索它
- amazon-web-services - 为使用 ansible 创建的 EC2 实例创建和分配公共 IP
- angular - 对 ngOnInit 中的订阅进行单元测试不起作用
- microsoft-graph-api - 无法通过 Graph API 创建全天重复
- grails - 使用基于 ldap 角色的授权进行身份验证后的 grails 应用程序访问
- swift - 如何在 UITabbar 中设置具有所需阴影的左上角和右上角半径?