全网整合营销服务商

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

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


相关文章: 制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  如何在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小时内与您取得联系。