在react项目开发中有一个需求是,页面滚动到tab所在位置时,tab要固定在顶部。

实现的思路其实很简单,就是判断当滚动距离scrollTop大于tab距离页面顶部距离offsetTop时,将tab的position变为fixed。
在react中,我在state中设置一个navTop属性,切换这个属性的值为true或者false,然后tab标签使用classnames()这个方法来利用navTop的值添加类名fixed。
一开始我是这样写的:
import cs from 'classnames';
class FixedTab extends React.Component{
constructor(props){
super(props);
this.state = {
navTop: false
}
this.$tab = null;
this.offsetTop = 0;
}
componentDidMount(){
this.$tab = this.refs.tab;
if(this.$tab){
this.offsetTop = this.$tab.offsetTop;
window.addEventListener('scroll',this.handleScroll);
}
}
handleScroll(){
let sTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
if(sTop >= this.offsetTop){
this.setState({
navTop: true
})
}
if(sTop < this.offsetTop){
this.setState({
navTop:false
})
}
}
render(){
return(
<div ref="tab" className={cs({'fixed':this.state.navTop})}></div>
)
}
}
然后我发现这样写有问题,当我滚动条滚动距离达到条件时,tab是出现了吸顶的效果,但一瞬间又恢复了,滚动条也回弹了,一直无法继续下拉。
我一开始以为判断逻辑有问题,但一直找不到解决的办法,后来我怀疑是state值改变的时间差导致的,好像陷入了一个死循环,然后我就在判断滚动距离之前加了一个判断navTop的状态。
修改的主要代码如下:
handleScroll(){
let sTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
if(!this.state.navTop && sTop >= this.offsetTop){
this.setState({
navTop: true
})
}
if(sTop < this.offsetTop){
this.setState({
navTop:false
})
}
}
这样修改之后吸顶效果就正常了。
我认为就是setState方法导致的问题,setState本身是一个异步的方法,它还有一个参数是回调函数。
以上这篇浅谈react.js中实现tab吸顶效果的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# react.js
# tab吸顶
# 微信小程序实现吸顶特效
# 微信小程序实现吸顶效果
# js实现多个标题吸顶效果
# JS实现网站吸顶条
# js实现移动端吸顶效果
# JS实现吸顶特效
# 原生js实现吸顶效果
# js实现导航吸顶效果
# 微信小程序wxs实现吸顶效果
# 小程序自定义模板实现吸顶功能
# 给大家
# 滚动条
# 是一个
# 我是
# 我在
# 就在
# 我一
# 找不到
# 中有
# 当我
# 我认为
# 希望能
# 这篇
# 浅谈
# 它还
# 方法来
# 回调
# 小编
# 值为
# 大家多多
相关文章:
建站之星如何开启自定义404页面避免用户流失?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
,有什么在线背英语单词效率比较高的网站?
如何在Windows环境下新建FTP站点并设置权限?
定制建站流程解析:需求评估与SEO优化功能开发指南
建站之星安装失败:服务器环境不兼容?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
香港网站服务器数量如何影响SEO优化效果?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
网站代码制作软件有哪些,如何生成自己网站的代码?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
电脑免费海报制作网站推荐,招聘海报哪个网站多?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何批量查询域名的建站时间记录?
免费视频制作网站,更新又快又好的免费电影网站?
,网站推广常用方法?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
ui设计制作网站有哪些,手机UI设计网址吗?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
网站设计制作公司地址,网站建设比较好的公司都有哪些?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
焦点电影公司作品,电影焦点结局是什么?
建站之星多图banner生成与模板自定义指南
怎么将XML数据可视化 D3.js加载XML
网站制作公司,橙子建站是合法的吗?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
网站制作的步骤包括,正确网址格式怎么写?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
视频网站制作教程,怎么样制作优酷网的小视频?
如何彻底卸载建站之星软件?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
c# 在ASP.NET Core中管理和取消后台任务
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何用VPS主机快速搭建个人网站?
如何快速搭建安全的FTP站点?
免费网站制作appp,免费制作app哪个平台好?
c# await 一个已经完成的Task会发生什么
威客平台建站流程解析:高效搭建教程与设计优化方案
网站制作话术技巧,网站推广做的好怎么话术?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
香港服务器选型指南:免备案配置与高效建站方案解析
大同网页,大同瑞慈医院官网?
如何打造高效商业网站?建站目的决定转化率
*请认真填写需求信息,我们会在24小时内与您取得联系。