全网整合营销服务商

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

免费咨询热线: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实现吸顶效果  # 小程序自定义模板实现吸顶功能  # 给大家  # 滚动条  # 是一个  # 我是  # 我在  # 就在  # 我一  # 找不到  # 中有  # 当我  # 我认为  # 希望能  # 这篇  # 浅谈  # 它还  # 方法来  # 回调  # 小编  # 值为  # 大家多多 


相关文章: 如何获取开源自助建站系统免费下载链接?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  Python多线程使用规范_线程安全解析【教程】  海南网站制作公司有哪些,海口网是哪家的?  ppt制作免费网站有哪些,ppt模板免费下载网站?  详解jQuery停止动画——stop()方法的使用  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  网站app免费制作软件,能免费看各大网站视频的手机app?  微信h5制作网站有哪些,免费微信H5页面制作工具?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  制作电商网页,电商供应链怎么做?  如何在自有机房高效搭建专业网站?  济南专业网站制作公司,济南信息工程学校怎么样?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站主机与虚拟主机有何区别?如何选择最优方案?  网站制作企业,网站的banner和导航栏是指什么?  如何选择美橙互联多站合一建站方案?  如何用y主机助手快速搭建网站?  建站之星展会模版如何一键下载生成?  微信小程序 input输入框控件详解及实例(多种示例)  昆明网站制作哪家好,昆明公租房申请网上登录入口?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  表情包在线制作网站免费,表情包怎么弄?  如何挑选最适合建站的高性能VPS主机?  清除minerd进程的简单方法  完全自定义免费建站平台:主题模板在线生成一站式服务  制作旅游网站html,怎样注册旅游网站?  建站之星代理平台如何选择最佳方案?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站之星如何配置系统实现高效建站?  青岛网站建设如何选择本地服务器?  如何快速生成凡客建站的专业级图册?  建站之星如何修改网站生成路径?  个人摄影网站制作流程,摄影爱好者都去什么网站?  高端云建站费用究竟需要多少预算?  如何制作一个表白网站视频,关于勇敢表白的小标题?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  建站为何优先选择香港服务器?  如何有效防御Web建站篡改攻击?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何在搬瓦工VPS快速搭建网站?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  高防服务器如何保障网站安全无虞? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。