在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实现吸顶效果
# 小程序自定义模板实现吸顶功能
# 给大家
# 滚动条
# 是一个
# 我是
# 我在
# 就在
# 我一
# 找不到
# 中有
# 当我
# 我认为
# 希望能
# 这篇
# 浅谈
# 它还
# 方法来
# 回调
# 小编
# 值为
# 大家多多
相关文章:
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
如何在Windows服务器上快速搭建网站?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何选择高效可靠的多用户建站源码资源?
建站之星展会模板:智能建站与自助搭建高效解决方案
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
西安大型网站制作公司,西安招聘网站最好的是哪个?
宝塔建站后网页无法访问如何解决?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
建站之星安装失败:服务器环境不兼容?
如何通过cPanel快速搭建网站?
如何设计高效校园网站?
网站网页制作专业公司,怎样制作自己的网页?
设计网站制作公司有哪些,制作网页教程?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
定制建站是什么?如何实现个性化需求?
网站制作话术技巧,网站推广做的好怎么话术?
Swift中swift中的switch 语句
已有域名和空间如何搭建网站?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
制作表格网站有哪些,线上表格怎么弄?
Java解压缩zip - 解压缩多个文件或文件夹实例
建站主机系统SEO优化与智能配置核心关键词操作指南
浅析上传头像示例及其注意事项
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何通过FTP服务器快速搭建网站?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何快速重置建站主机并恢复默认配置?
网站制作公司排行榜,四大门户网站排名?
C++如何使用std::optional?(处理可选值)
如何在IIS中新建站点并配置端口与IP地址?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
建站主机如何安装配置?新手必看操作指南
免费网站制作appp,免费制作app哪个平台好?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何用狗爹虚拟主机快速搭建网站?
c# 在高并发场景下,委托和接口调用的性能对比
如何用免费手机建站系统零基础打造专业网站?
兔展官网 在线制作,怎样制作微信请帖?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
大连 网站制作,大连天途有线官网?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
常州自助建站工具推荐:低成本搭建与模板选择技巧
建站之星×万网:智能建站系统+自助建站平台一键生成
家庭服务器如何搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。