React操作真實(shí)DOM實(shí)現(xiàn)動(dòng)態(tài)吸底部的示例
動(dòng)態(tài)吸底:開(kāi)始時(shí)fixed在頁(yè)面上,當(dāng)頁(yè)面滾動(dòng)到距離底部一定距離的時(shí)fixed部分固定。
這個(gè)是需要計(jì)算頁(yè)面滾動(dòng)距離的,如果使用Jquery或者原生js實(shí)現(xiàn)是非常好實(shí)現(xiàn)的,但是由于使用react并不推崇操作DOM,但是如果使用virtual DOM的話是無(wú)法實(shí)現(xiàn)該效果的,所以還是要引入js去直接獲取DOM進(jìn)行操作。
react在componentDidMount之后頁(yè)面渲染完成,所以可以在這里面直接用js原生方法獲取DOM元素,進(jìn)而進(jìn)行操作。
componentDidMount() {
this.changeFixed()
}
//計(jì)算高度
changeFixed(){
//getDOMNode
const layoutNode = document.querySelectorAll('.page-layout')[0];
const orderPriceNode = document.querySelectorAll('.test-price')[0];
window.addEventListener('scroll', function (e) {
const windowInnerHeight = window.innerHeight;
const layoutNodeHeight = layoutNode.offsetHeight;
//滾動(dòng)超出視野距離
let scrollTop = window.pageYOffset|| document.documentElement.scrollTop || document.body.scrollTop;
const distanceBottom = layoutNodeHeight - scrollTop - windowInnerHeight;
//120的時(shí)候吸底
if(distanceBottom <= 120){
orderPriceNode.classList.remove('fixed');
}else{
orderPriceNode.classList.add('fixed');
}
})
}
這樣就實(shí)現(xiàn)了當(dāng)距離底部120的時(shí)候吸底
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
React框架快速實(shí)現(xiàn)簡(jiǎn)易的Markdown編輯器
這篇文章主要為大家介紹了使用React框架實(shí)現(xiàn)簡(jiǎn)易的Markdown編輯器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
詳解如何在React單頁(yè)面應(yīng)用中捕獲錯(cuò)誤
在當(dāng)前的Web開(kāi)發(fā)中,使用React構(gòu)建單頁(yè)面應(yīng)用(SPA)已經(jīng)成為一種常見(jiàn)的做法,然而,當(dāng)應(yīng)用程序遇到錯(cuò)誤時(shí),有可能會(huì)導(dǎo)致整個(gè)頁(yè)面崩潰,給用戶帶來(lái)不好的體驗(yàn),本文將介紹如何在React單頁(yè)面應(yīng)用中捕獲錯(cuò)誤,以防止整個(gè)頁(yè)面的崩潰,需要的朋友可以參考下2023-09-09
從頭寫React-like框架的工程搭建實(shí)現(xiàn)
這篇文章主要介紹了從頭寫React-like框架的工程搭建實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
React實(shí)現(xiàn)一個(gè)支持動(dòng)態(tài)插槽的Layout組件
這篇文章主要為大家詳細(xì)介紹了如何使用React實(shí)現(xiàn)一個(gè)支持動(dòng)態(tài)注冊(cè)內(nèi)容的插槽組件,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以了解一下2025-02-02

