最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年09月06日 07:55:43   作者:小少等等等  
下面小編就為大家?guī)硪黄獪\談react.js中實現(xiàn)tab吸頂效果的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在react項目開發(fā)中有一個需求是,頁面滾動到tab所在位置時,tab要固定在頂部。

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

在react中,我在state中設(shè)置一個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>
  )
 } 
}

然后我發(fā)現(xiàn)這樣寫有問題,當我滾動條滾動距離達到條件時,tab是出現(xiàn)了吸頂?shù)男Ч?,但一瞬間又恢復了,滾動條也回彈了,一直無法繼續(xù)下拉。

我一開始以為判斷邏輯有問題,但一直找不到解決的辦法,后來我懷疑是state值改變的時間差導致的,好像陷入了一個死循環(huán),然后我就在判斷滾動距離之前加了一個判斷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
    })
  }
 }

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

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

以上這篇淺談react.js中實現(xiàn)tab吸頂效果的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用React封裝一個Tree樹形組件的實例代碼

    使用React封裝一個Tree樹形組件的實例代碼

    這篇文章主要介紹了使用React封裝一個Tree樹形組件的實例,文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • React中useTransition鉤子函數(shù)的使用詳解

    React中useTransition鉤子函數(shù)的使用詳解

    React?18的推出標志著React并發(fā)特性的正式到來,其中useTransition鉤子函數(shù)是一個重要的新增功能,下面我們就來學習一下useTransition鉤子函數(shù)的具體使用吧
    2024-02-02
  • React+Vite從零搭建項目及配置的實現(xiàn)

    React+Vite從零搭建項目及配置的實現(xiàn)

    本文主要介紹了React+Vite從零搭建項目及配置的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • React如何使用Portal實現(xiàn)跨層級DOM渲染

    React如何使用Portal實現(xiàn)跨層級DOM渲染

    Portal 就像是一個“傳送門”,能讓你把組件里的元素“傳送到”其他 DOM 節(jié)點下面去渲染,下面小編就來和大家簡單介紹一下具體的使用方法吧
    2025-04-04
  • React?Fiber?鏈表操作及原理示例詳解

    React?Fiber?鏈表操作及原理示例詳解

    這篇文章主要為大家介紹了React?Fiber?鏈表操作原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React Router v4 入坑指南(小結(jié))

    React Router v4 入坑指南(小結(jié))

    這篇文章主要介紹了React Router v4 入坑指南(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • React組件化的一些額外知識點補充

    React組件化的一些額外知識點補充

    React是一個用于構(gòu)建用戶界面的JavaScript庫,下面這篇文章主要給大家介紹了關(guān)于React組件化的一些額外知識點,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • 關(guān)于useEffect執(zhí)行兩次的問題及解決

    關(guān)于useEffect執(zhí)行兩次的問題及解決

    這篇文章主要介紹了關(guān)于useEffect執(zhí)行兩次的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • React 的調(diào)和算法Diffing 算法策略詳解

    React 的調(diào)和算法Diffing 算法策略詳解

    React的調(diào)和算法,主要發(fā)生在render階段,調(diào)和算法并不是一個特定的算法函數(shù),而是指在調(diào)和過程中,為提高構(gòu)建workInProcess樹的性能,以及Dom樹更新的性能,而采用的一種策略,又稱diffing算法
    2021-12-12
  • 如何在 React 中調(diào)用多個 onClick 函數(shù)

    如何在 React 中調(diào)用多個 onClick 函數(shù)

    這篇文章主要介紹了如何在React中調(diào)用多個onClick函數(shù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11

最新評論

千阳县| 三江| 板桥市| 土默特右旗| 自治县| 莱州市| 古蔺县| 陆丰市| 鸡东县| 瓦房店市| 长丰县| 庄河市| 沙坪坝区| 丹巴县| 富阳市| 涿州市| 陆河县| 柘荣县| 龙南县| 佛坪县| 怀宁县| 贡嘎县| 潍坊市| 禹州市| 扎囊县| 乌拉特后旗| 清远市| 台北县| 香河县| 肥东县| 儋州市| 柯坪县| 磐石市| 丰台区| 和林格尔县| 奉节县| 泸水县| 论坛| 休宁县| 乐陵市| 灌南县|