全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈react.js中实现tab吸顶效果的问题

在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小时内与您取得联系。