亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react.js中怎么實現tab吸頂效果

發布時間:2021-06-29 10:57:22 來源:億速云 閱讀:194 作者:小新 欄目:web開發

這篇文章給大家分享的是有關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吸頂效果”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武宁县| 太原市| 从江县| 鸡泽县| 行唐县| 达拉特旗| 沅陵县| 长宁县| 新田县| 涡阳县| 敦煌市| 偃师市| 平泉县| 驻马店市| 密云县| 云和县| 普宁市| 天水市| 双流县| 兴隆县| 香河县| 彩票| 永和县| 镶黄旗| 东台市| 嘉定区| 扶绥县| 灌云县| 卢湾区| 武强县| 昆山市| 内丘县| 陇川县| 招远市| 寿阳县| 山阳县| 广河县| 临夏县| 泉州市| 时尚| 远安县|