javascript - 修复导航滚动太远并覆盖内容顶部
问题描述
我在 React 中创建了一个固定的导航,但是当我单击其上的链接时,窗口滚动得太远并且导航覆盖了内容的顶部。我试图动态计算导航的高度并在滚动中考虑到这一点,但它仍然会出现错误的位置。
import React from 'react'
import { string } from 'prop-types'
class FixedNav extends React.Component {
constructor(props){
super(props)
this.handleClick = this.handleClick.bind(this)
}
shouldComponentUpdate (nextProps) {
return nextProps.navItems !== this.props.navItems
}
handleClick (e) {
const nav = document.querySelector('#fixedNav')
let navHeight = nav.getBoundingClientRect().height
let itemLink = document.querySelector(e.target.parentElement.dataset.link)
let scrollHeight = itemLink.offsetTop - navHeight
window.scroll(0, scrollHeight)
window.location.hash = e.target.parentElement.dataset.link
e.preventDefault()
}
createNavItems () {
const { navItems } = this.props
return navItems.map((item, key) => {
const itemLink = items[1].link
return (
<li key={key} data-link={itemLink}>
<a href={itemLink} data-link={itemLink} onClick={this.handleClick}>
<p>{ items[0] }</p>
</a>
</li>
)
})
}
render () {
const navItems = this.createNavItems()
return (
<div>
<ul id='side-navigation' className='side-nav'>
{navItems}
</ul>
</div>
)
}
}
FixedNav.propTypes = {
navItems: string.isRequired
}
export default FixedNav
解决方案
推荐阅读
- google-apps-script - 监控一系列单元格并根据其值生成警报的最佳方法
- javascript - 你如何将一个类 HOC 组件转换为一个接受参数的函数钩子组件?
- swift - 如何使用 AWSS3TransferUtility 将带有用户元数据的音频文件上传到 S3
- jupyter-notebook - Jupyter Notebook 速度很慢,无法保存和运行大文件
- html - 我如何使 div 内容高度不与下面的内容重叠
- python - 减少 Matplotlib 直方图中条形之间的空白
- c# - C# 的实体框架迁移 API
- css - 三星 Galaxy S10 的媒体查询不工作
- wordpress - 如何获取多个数组的自定义元字段的值
- swift - “使用默认容器”未显示在 iCloud 功能中