当前位置:首页 > 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
分享给朋友:

相关文章

css制作音乐盒页面

css制作音乐盒页面

音乐盒页面设计思路 音乐盒页面通常需要结合音频播放功能与视觉设计。以下是实现一个基础音乐盒页面的关键步骤。 HTML结构搭建 基础HTML需包含音频播放器控件和播放列表: <!DOC…

vue实现页面分模块

vue实现页面分模块

Vue 实现页面分模块的方法 在 Vue 中实现页面分模块可以通过组件化、路由分割、动态加载等方式实现,以下是具体方法: 组件化拆分 将页面拆分为多个功能独立的组件,每个组件负责特定功能模块。通过…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js 实现链表

js 实现链表

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

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…