当前位置:首页 > JavaScript

js实现页面滚动

2026-03-01 12:59:18JavaScript

监听滚动事件

使用 window.addEventListener 监听 scroll 事件,可以实时获取滚动位置:

window.addEventListener('scroll', function() {
    console.log(window.scrollY); // 垂直滚动距离
    console.log(window.scrollX); // 水平滚动距离
});

平滑滚动到指定位置

使用 window.scrollTo 方法实现平滑滚动,通过 behavior: 'smooth' 启用动画效果:

window.scrollTo({
    top: 500, // 垂直目标位置
    left: 0,  // 水平目标位置
    behavior: 'smooth'
});

滚动到页面顶部或底部

通过 window.scrollTo 结合 document.body.scrollHeight 实现:

js实现页面滚动

// 滚动到顶部
window.scrollTo({ top: 0, behavior: 'smooth' });

// 滚动到底部
window.scrollTo({
    top: document.body.scrollHeight,
    behavior: 'smooth'
});

滚动到指定元素

使用 Element.scrollIntoView 方法将特定元素滚动到视口中:

document.getElementById('target-element').scrollIntoView({
    behavior: 'smooth',
    block: 'start' // 对齐方式:start/center/end
});

自定义滚动动画

通过 requestAnimationFrame 实现自定义滚动动画:

js实现页面滚动

function smoothScrollTo(targetY, duration = 1000) {
    const startY = window.scrollY;
    const distance = targetY - startY;
    const startTime = performance.now();

    function step(currentTime) {
        const elapsed = currentTime - startTime;
        const progress = Math.min(elapsed / duration, 1);
        window.scrollTo(0, startY + distance * progress);
        if (progress < 1) {
            requestAnimationFrame(step);
        }
    }

    requestAnimationFrame(step);
}

// 调用示例
smoothScrollTo(800);

滚动节流优化

对滚动事件进行节流处理,避免性能问题:

let ticking = false;
window.addEventListener('scroll', function() {
    if (!ticking) {
        requestAnimationFrame(function() {
            // 实际处理逻辑
            console.log(window.scrollY);
            ticking = false;
        });
        ticking = true;
    }
});

滚动位置恢复

在页面刷新时恢复之前的滚动位置:

// 保存位置
window.addEventListener('beforeunload', () => {
    sessionStorage.setItem('scrollPos', window.scrollY);
});

// 恢复位置
window.addEventListener('load', () => {
    const scrollPos = sessionStorage.getItem('scrollPos');
    if (scrollPos) {
        window.scrollTo(0, parseInt(scrollPos));
    }
});

标签: 页面js
分享给朋友:

相关文章

vue实现页面分页

vue实现页面分页

Vue实现页面分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,可以快速实现分页功能。需要先安装Element UI库。 <t…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

vue实现组织架构页面

vue实现组织架构页面

Vue 实现组织架构页面 数据准备 组织架构通常以树形结构展示,需要准备嵌套的节点数据。例如: data() { return { orgData: { id: 1,…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

h5实现登录页面跳转页面跳转页面跳转

h5实现登录页面跳转页面跳转页面跳转

使用HTML5实现登录页面跳转 在HTML5中实现登录页面跳转可以通过多种方式完成,包括表单提交、JavaScript跳转和超链接跳转。以下是几种常见的实现方法。 表单提交跳转 使用HTML表单的a…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…