国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

淺談react.js中實(shí)現(xiàn)tab吸頂效果的問題

2024-05-06 15:11:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在react項(xiàng)目開發(fā)中有一個(gè)需求是,頁(yè)面滾動(dòng)到tab所在位置時(shí),tab要固定在頂部。

實(shí)現(xiàn)的思路其實(shí)很簡(jiǎn)單,就是判斷當(dāng)滾動(dòng)距離scrollTop大于tab距離頁(yè)面頂部距離offsetTop時(shí),將tab的position變?yōu)閒ixed。

在react中,我在state中設(shè)置一個(gè)navTop屬性,切換這個(gè)屬性的值為true或者false,然后tab標(biāo)簽使用classnames()這個(gè)方法來(lái)利用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>  ) } }

然后我發(fā)現(xiàn)這樣寫有問題,當(dāng)我滾動(dòng)條滾動(dòng)距離達(dá)到條件時(shí),tab是出現(xiàn)了吸頂?shù)男Ч凰查g又恢復(fù)了,滾動(dòng)條也回彈了,一直無(wú)法繼續(xù)下拉。

我一開始以為判斷邏輯有問題,但一直找不到解決的辦法,后來(lái)我懷疑是state值改變的時(shí)間差導(dǎo)致的,好像陷入了一個(gè)死循環(huán),然后我就在判斷滾動(dòng)距離之前加了一個(gè)判斷navTop的狀態(tài)。

修改的主要代碼如下:

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    })  } }

這樣修改之后吸頂效果就正常了。

我認(rèn)為就是setState方法導(dǎo)致的問題,setState本身是一個(gè)異步的方法,它還有一個(gè)參數(shù)是回調(diào)函數(shù)。

以上這篇淺談react.js中實(shí)現(xiàn)tab吸頂效果的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持錯(cuò)新站長(zhǎng)站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 伊宁县| 盐津县| 赞皇县| 诏安县| 紫金县| 盐城市| 福贡县| 察哈| 绍兴县| 石柱| 吉安县| 靖远县| 东至县| 鹰潭市| 榆树市| 宁河县| 山丹县| 巴林右旗| 常德市| 临泉县| 且末县| 绥德县| 得荣县| 望都县| 兴业县| 天津市| 荣昌县| 刚察县| 洪洞县| 石林| 湖州市| 化德县| 合江县| 银川市| 青河县| 枣庄市| 波密县| 乌兰浩特市| 德令哈市| 徐汇区| 固镇县|