当前位置:首页 > JavaScript

js实现滚动距离

2026-02-03 01:44:00JavaScript

获取滚动距离的方法

使用window.pageYOffsetwindow.scrollY可以获取垂直滚动距离。这两个属性返回的值相同,都是文档从顶部开始滚动过的像素数。

const scrollDistance = window.pageYOffset || window.scrollY;
console.log(scrollDistance);

对于水平滚动距离,可以使用window.pageXOffsetwindow.scrollX

const horizontalScroll = window.pageXOffset || window.scrollX;
console.log(horizontalScroll);

监听滚动事件

通过添加scroll事件监听器,可以实时获取滚动距离。

window.addEventListener('scroll', function() {
    const scrollDistance = window.pageYOffset || window.scrollY;
    console.log('当前滚动距离:', scrollDistance);
});

兼容性处理

对于旧版浏览器,可以使用document.documentElement.scrollTopdocument.body.scrollTop作为备选方案。

const scrollDistance = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
console.log(scrollDistance);

滚动到指定位置

使用window.scrollTo()方法可以将页面滚动到指定位置。

window.scrollTo({
    top: 500, // 滚动到距离顶部500像素的位置
    behavior: 'smooth' // 平滑滚动
});

获取元素的滚动距离

对于具有滚动条的元素(如div),可以使用scrollTop属性获取其滚动距离。

const element = document.getElementById('scrollable-div');
console.log(element.scrollTop); // 垂直滚动距离
console.log(element.scrollLeft); // 水平滚动距离

设置元素的滚动距离

通过修改scrollTopscrollLeft属性,可以设置元素的滚动位置。

const element = document.getElementById('scrollable-div');
element.scrollTop = 100; // 设置垂直滚动距离为100像素

平滑滚动动画

使用requestAnimationFrame可以实现自定义的平滑滚动效果。

function smoothScrollTo(targetPosition, duration = 1000) {
    const startPosition = window.pageYOffset;
    const distance = targetPosition - startPosition;
    let startTime = null;

    function animation(currentTime) {
        if (!startTime) startTime = currentTime;
        const timeElapsed = currentTime - startTime;
        const run = easeInOutQuad(timeElapsed, startPosition, distance, duration);
        window.scrollTo(0, run);
        if (timeElapsed < duration) requestAnimationFrame(animation);
    }

    function easeInOutQuad(t, b, c, d) {
        t /= d / 2;
        if (t < 1) return c / 2 * t * t + b;
        t--;
        return -c / 2 * (t * (t - 2) - 1) + b;
    }

    requestAnimationFrame(animation);
}

// 使用示例
smoothScrollTo(500, 1000);

滚动到元素位置

使用Element.scrollIntoView()方法可以将元素滚动到可视区域。

const element = document.getElementById('target-element');
element.scrollIntoView({
    behavior: 'smooth',
    block: 'start'
});

获取窗口高度和文档高度

计算滚动百分比或判断是否滚动到底部时,可能需要获取窗口高度和文档高度。

const windowHeight = window.innerHeight;
const documentHeight = document.documentElement.scrollHeight;
const scrollPercentage = (window.pageYOffset / (documentHeight - windowHeight)) * 100;
console.log(scrollPercentage);

判断是否滚动到底部

通过比较滚动距离和文档高度,可以判断是否滚动到页面底部。

window.addEventListener('scroll', function() {
    const scrollDistance = window.pageYOffset || document.documentElement.scrollTop;
    const windowHeight = window.innerHeight;
    const documentHeight = document.documentElement.scrollHeight;

    if (scrollDistance + windowHeight >= documentHeight - 10) {
        console.log('已滚动到底部');
    }
});

js实现滚动距离

标签: 距离js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…