<div id="wrapper">
<div id="left-panel"></div>
<div id="long-right-panel></div>
</div>
<footer></footer>
在滾動,我有一個問題打交道時的#wrapper
頂部位置是< = 0,當從#left-panel
底部位置減去footer
頂部位置是> = 0,我想的#left-panel
有風格固定的位置。否則它應該有相對的位置。如何根據條件在滾動時設置元素在固定位置和相對位置之間的位置?
我遇到了一個問題,一旦滿足上述條件,#左面板在相對位置和固定位置之間翻轉。
下面是澄清一些代碼:
// creates event listener
window.addEventListener('scroll', handleScroll);
// get DOM elements outside of scroll event
const wrapperRect = document.getElementById('wrapper').getBoundingClientRect();
const leftPanel = document.getElementById('left-panel');
const leftPanelRect = leftPanel.getBoundingClientRect();
const rightPanel = document.getElementById('long-right-panel');
const rightPanelRect = rightPanel.getBoundingClientRect();
const footerRect = document.querySelector('footer').getBoundingClientRect();
function handleScroll() {
/* if the #wrapper has scrolled past the top of the viewport and the space between the top of the footer and the bottom of the #left-panel is greater than 0, set #left-panel to position fixed */
if (wrapperRect.top <= 0 && (footerRect.top - leftPanelRect.bottom) > 0) {
leftPanel.setAttribute("style", "position: fixed; top: 3rem;");
rightPanel.setAttribute("style", "margin-left: 45%;");
}
/* else set the #left-panel position to relative */
else {
leftPanel.setAttribute("style", "position: relative;");
rightPanel.setAttribute("style", "");
}
}
代碼工作,除了,我需要某種標誌或打破它的手段,因爲它代表,當條件爲真,其固定,但是當它們是假的,#left-panel
跳回到它的原始位置和#wrapper
頂部是< 0,並且footerRect.top
和leftPanelRect.bottom
之間的間隔大於0並且將其改變爲固定...然後滾動變回相對。 ..這會導致跳躍和閃爍。
有關如何解決的任何建議?
謝謝。爲了給出上下文,我需要讓#左側面板不會撞到頁腳,這就是爲什麼我要聽左側面板和頁腳頂部的底部。當我開始工作時,我會檢查你的建議。 –
這是#左側面板跳轉,因爲當它從相對於固定切換時,左側窗格的底部與頁腳頂部之間的距離在滾動事件中被重新評估。 –
你能提供一個到你正在使用的頁面的鏈接嗎? –