国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

使用智能 CSS 基于用戶滾動位置應用樣式

2024-07-11 08:33:38
字體:
來源:轉載
供稿:網友

通過將當前滾動偏移量添加到到 html 元素的屬性上,我們可以根據當前滾動位置設置頁面上的元素樣式。我們可以使用它來構建一個浮動在頁面頂部的導航組件。

這是我們將使用的 HTML,<header> 組件是我們希望當我們向下滾動時,始終浮動在頁面頂部的一個組件。


<header>I'm the page header</header>
<p>Lot's of content here...</p>
<p>More beautiful content...</p>
<p>Content...</p>

首先,我們將監聽 document 上的 ‘scroll’ 事件,并且每次用戶滾動時我們都會取出當前的 scrollY 值。


document.addEventListener('scroll', () => {
document.documentElement.dataset.scroll = window.scrollY;
});

我們將滾動位置存儲在 html 元素的數據屬性中。如果您使用開發工具查看 DOM,它將如下所示:<html data-scroll="0">
現在我們可以使用此屬性來設置頁面上的元素樣式。


/* 保證 header標簽始終高于 3em */
header {
min-height: 3em;
width: 100%;
background-color: #fff;
}

/* 在頁面頂部保留與 header 的 min-height 相同的高度 */
html:not([data-scroll='0']) body {
padding-top: 3em;
}

/* 將 header 標簽切換成 fixed 定位模式,并且將它固定在頁面頂部 */
html:not([data-scroll='0']) header {
position: fixed;
top: 0;
z-index: 1;

/* box-shadow 屬性能夠增強浮動的效果 */
box-shadow: 0 0 .5em rgba(0, 0, 0, .5);
}

基本上就是這樣,當用戶向下滾動時,header 標簽將自動從頁面中分離并浮動在內容之上。JavaScript 代碼并不關心這一點,它的任務就是將滾動偏移量放在數據屬性中。這很完美,因為 JavaScript 和 CSS 之間沒有緊密耦合。

但仍有一些可以改進的地方,主要是在性能方面。

首先,我們必須修改 JavaScript 腳本,以適應頁面加載時滾動位置不在頂部的情況。在這樣的情況下,header 標簽將呈現錯誤的樣式。

頁面加載時,我們必須快速獲取當前的滾動偏移量,這樣確保了我們始終與當前的頁面的狀態同步。


// 讀出當前頁面的滾動位置并將其存入 document 的 data 屬性中
// 因此我們就可以在我們的樣式表中使用它
const storeScroll = () => {
document.documentElement.dataset.scroll = window.scrollY;
}

// 監聽滾動事件
document.addEventListener('scroll', storeScroll);

// 第一次打開頁面時就更新滾動位置
storeScroll();

接下來我們將看一些性能方面改進。如果我們想要獲取 scrollY 滾動位置,瀏覽器將必須計算頁面上每個元素的位置,以確保它返回正確的位置。如果我們不強制它每次滾動都取值才是最好的做法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仙居县| 伊宁县| 瓦房店市| 偃师市| 沙田区| 龙井市| 革吉县| 那曲县| 永安市| 东辽县| 锦屏县| 永寿县| 黄浦区| 沂南县| 西林县| 泽库县| 龙州县| 武冈市| 黄冈市| 漯河市| 祁门县| 阜平县| 平舆县| 连江县| 庄浪县| 扎兰屯市| 左贡县| 南靖县| 子洲县| 丰台区| 安远县| 驻马店市| 嵩明县| 汶上县| 开平市| 额尔古纳市| 肥城市| 永登县| 伊宁市| 静安区| 明水县|