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

首頁 > 編程 > JavaScript > 正文

淺談react.js中實現tab吸頂效果的問題

2019-11-19 15:32:52
字體:
來源:轉載
供稿:網友

在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吸頂效果的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民县| 安岳县| 龙里县| 儋州市| 大庆市| 姚安县| 平远县| 布尔津县| 交口县| 邻水| 那曲县| 汝城县| 青岛市| 蒙城县| 大荔县| 加查县| 楚雄市| 沙田区| 桐城市| 武乡县| 湄潭县| 台前县| 曲周县| 郯城县| 独山县| 漯河市| 彭州市| 盐边县| 井研县| 叙永县| 长汀县| 来安县| 鄂伦春自治旗| 安溪县| 临沂市| 渭源县| 习水县| 若羌县| 若羌县| 岑溪市| 贡嘎县|