CSS入门:滚动相关属性详解

105 阅读4分钟

window.scrollY 及相关滚动属性详解

window.scrollY 属性详解

window.scrollY 返回文档在垂直方向上滚动的像素值。简单来说,当用户向下滚动页面时,这个值会增加,向上滚动时减少。

// 获取当前垂直滚动位置
const currentScrollY = window.scrollY;
console.log(`当前滚动位置: ${currentScrollY}px`);

其他与滚动相关的属性和方法

1. 水平滚动位置

window.scrollX
表示文档在水平方向上滚动的像素值。

// 获取当前水平滚动位置
const currentScrollX = window.scrollX;
console.log(`当前水平滚动位置: ${currentScrollX}px`);

2. 滚动位置设置方法

window.scrollTo(x, y)
将文档滚动到指定的坐标位置。

// 滚动到页面顶部
window.scrollTo(0, 0);
// 滚动到页面底部
window.scrollTo(0, document.body.scrollHeight);
// 滚动到特定位置
window.scrollTo(0, 500); // 滚动到垂直方向500px的位置

window.scroll(x, y)
scrollTo相同,已废弃,但仍然被浏览器支持。

window.scrollBy(x, y)
将文档从当前位置滚动指定的距离。

// 向下滚动100px
window.scrollBy(0, 100);
// 向上滚动100px
window.scrollBy(0, -100);
// 向右滚动200px
window.scrollBy(200, 0);

3. 平滑滚动

window.scrollTo({ behavior: 'smooth' })
实现平滑滚动效果。

// 平滑滚动到页面顶部
window.scrollTo({
    top: 0,
    behavior: 'smooth'
});
// 平滑滚动到特定元素
const element = document.getElementById('target');
element.scrollIntoView({
    behavior: 'smooth'
});

4. 滚动事件

window.addEventListener('scroll', callback)
监听滚动事件。

window.addEventListener('scroll', () => {
    console.log(`当前滚动位置: ${window.scrollY}px`);
});

5. 滚动相关元素属性

window.pageYOffset
scrollY的别名,表示相同的意思。

window.pageXOffset
scrollX的别名,表示相同的意思。

document.documentElement.scrollTop
获取或设置文档的垂直滚动位置(非标准方式)。我已经滚了多少

document.body.scrollTop
获取或设置文档的垂直滚动位置(非标准方式)。

element.scrollTop
获取或设置元素的垂直滚动位置。

6. 元素滚动视图

element.scrollWidth
返回元素的完整滚动宽度(包括不可见部分)。

element.scrollHeight
返回元素的完整滚动高度(包括不可见部分)。总共有多少可以滚

element.clientWidth
返回元素的内部宽度(包括padding,但不包括border和scrollbar)。

element.clientHeight
返回元素的内部高度(包括padding,但不包括border和scrollbar)。

element.offsetWidth
返回元素的布局宽度(包括padding、border和scrollbar)。

element.offsetHeight
返回元素的布局高度(包括padding、border和scrollbar)。

7. 检测元素是否在视口中

function isInViewport(element) {
    const rect = element.getBoundingClientRect();
    return (
        rect.top <= window.innerHeight &&
        rect.bottom >= 0 &&
        rect.left <= window.innerWidth &&
        rect.right >= 0
    );
}
// 使用示例
const targetElement = document.getElementById('target-element');
window.addEventListener('scroll', () => {
    if (isInViewport(targetElement)) {
        console.log('元素在视口中');
    }
});

innerWidth 是一个只读的浏览器属性,它返回浏览器窗口的视口(viewport)宽度(以像素为单位),包括(如果存在)垂直滚动条的宽度。如果需要排除滚动条,请使用 document.documentElement.clientWidth

自定义滚动条的基础知识

在深入实践之前,我们需要了解一些基础知识:

  1. WebKit浏览器(Chrome、Safari、Edge、Opera)支持通过::-webkit-scrollbar系列伪元素自定义滚动条
  2. Firefox使用scrollbar-widthscrollbar-color属性,但自定义选项较少
  3. IE和Edge旧版支持scrollbar-face-color等已废弃属性,不建议使用

本文主要介绍WebKit浏览器的自定义方法,这是目前最灵活、兼容性最好的实现方式。

五种实用滚动条样式实现

1. 简约风格

简约风格适合注重内容本身的设计,细小的滚动条提供功能而不干扰阅读体验。

<CSS>
.minimal-scroll::-webkit-scrollbar {
    width: 8px;
}
.minimal-scroll::-webkit-scrollbar-track {
    background: #f1f1f1;
    border-radius: 10px;
}
.minimal-scroll::-webkit-scrollbar-thumb {
    background: #a5b1c2;
    border-radius: 10px;
}
.minimal-scroll::-webkit-scrollbar-thumb:hover {
    background: #778ca3;
}

应用场景:博客、文档、阅读类应用

2. 现代风格

渐变色彩的滚动条展现现代设计感,适合追求时尚的网站。

<CSS>
.modern-scroll::-webkit-scrollbar {
    width: 12px;
}
.modern-scroll::-webkit-scrollbar-track {
    background: #dfe6e9;
    border-radius: 10px;
}
.modern-scroll::-webkit-scrollbar-thumb {
    background: linear-gradient(to bottom, #6c5ce7, #a29bfe);
    border-radius: 10px;
    border: 2px solid #dfe6e9;
}
.modern-scroll::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(to bottom, #5649d9, #8c82e6);
}

应用场景:创意作品集、现代化电商平台

3. 暗色风格

专为暗色模式设计的滚动条,低对比度减少眼睛疲劳。

<CSS>
.dark-scroll::-webkit-scrollbar {
    width: 10px;
}
.dark-scroll::-webkit-scrollbar-track {
    background: #2d3436;
    border-radius: 10px;
}
.dark-scroll::-webkit-scrollbar-thumb {
    background: #636e72;
    border-radius: 10px;
}
.dark-scroll::-webkit-scrollbar-thumb:hover {
    background: #b2bec3;
}

应用场景:暗色模式网站、夜间阅读应用

4. 彩色风格

多彩渐变滚动条为页面增添活力。

<CSS>
.colorful-scroll::-webkit-scrollbar {
    width: 14px;
}
.colorful-scroll::-webkit-scrollbar-track {
    background: #ffeaa7;
    border-radius: 10px;
}
.colorful-scroll::-webkit-scrollbar-thumb {
    background: linear-gradient(to bottom, #fd79a8, #fdcb6e, #00cec9);
    border-radius: 10px;
    border: 2px solid #ffeaa7;
}
.colorful-scroll::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(to bottom, #e84393, #fdcb6e, #00cec9);
}

应用场景:娱乐网站、节日活动页面