十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹“react.js中如何實(shí)現(xiàn)tab吸頂效果”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“react.js中如何實(shí)現(xiàn)tab吸頂效果”文章能幫助大家解決問題。
目前創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、牙克石網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
在react項(xiàng)目開發(fā)中有一個需求是,頁面滾動到tab所在位置時,tab要固定在頂部。
實(shí)現(xiàn)的思路其實(shí)很簡單,就是判斷當(dāng)滾動距離scrollTop大于tab距離頁面頂部距離offsetTop時,將tab的position變?yōu)閒ixed。
在react中,我在state中設(shè)置一個navTop屬性,切換這個屬性的值為true或者false,然后tab標(biāo)簽使用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( ) } }
然后我發(fā)現(xiàn)這樣寫有問題,當(dāng)我滾動條滾動距離達(dá)到條件時,tab是出現(xiàn)了吸頂?shù)男Ч?,但一瞬間又恢復(fù)了,滾動條也回彈了,一直無法繼續(xù)下拉。
我一開始以為判斷邏輯有問題,但一直找不到解決的辦法,后來我懷疑是state值改變的時間差導(dǎo)致的,好像陷入了一個死循環(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 }) } }
這樣修改之后吸頂效果就正常了。
我認(rèn)為就是setState方法導(dǎo)致的問題,setState本身是一個異步的方法,它還有一個參數(shù)是回調(diào)函數(shù)。
關(guān)于“react.js中如何實(shí)現(xiàn)tab吸頂效果”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。