当前位置:首页 > 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()方法可以将页面滚动到指定位置。

js实现滚动距离

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可以实现自定义的平滑滚动效果。

js实现滚动距离

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实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…