当前位置:首页 > JavaScript

js实现滚动条

2026-04-04 01:21:01JavaScript

使用原生JavaScript实现滚动条

通过监听滚动事件获取滚动位置

window.addEventListener('scroll', function() {
    let scrollPosition = window.scrollY;
    console.log('当前滚动位置:', scrollPosition);
});

平滑滚动到指定位置

使用scrollTo方法实现平滑滚动效果

js实现滚动条

function smoothScrollTo(targetPosition, duration = 1000) {
    const startPosition = window.scrollY;
    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);
}

自定义滚动条样式

通过CSS隐藏默认滚动条并创建自定义样式

body {
    scrollbar-width: none; /* Firefox */
    -ms-overflow-style: none; /* IE/Edge */
}

body::-webkit-scrollbar {
    display: none; /* Chrome/Safari */
}

.custom-scrollbar {
    position: fixed;
    right: 0;
    top: 0;
    width: 10px;
    height: 100vh;
    background: #f1f1f1;
}

.scroll-thumb {
    width: 100%;
    background: #888;
    border-radius: 5px;
}

同步自定义滚动条

将自定义滚动条与实际滚动位置同步

js实现滚动条

const scrollThumb = document.querySelector('.scroll-thumb');
const scrollableHeight = document.documentElement.scrollHeight - window.innerHeight;

window.addEventListener('scroll', function() {
    const scrollPercentage = (window.scrollY / scrollableHeight) * 100;
    const thumbHeight = (window.innerHeight / document.documentElement.scrollHeight) * 100;

    scrollThumb.style.height = `${thumbHeight}%`;
    scrollThumb.style.transform = `translateY(${scrollPercentage}%)`;
});

滚动到元素位置

实现滚动到页面特定元素的功能

function scrollToElement(elementId) {
    const element = document.getElementById(elementId);
    if (element) {
        const elementPosition = element.getBoundingClientRect().top + window.scrollY;
        smoothScrollTo(elementPosition - 20); // 减去20px作为顶部边距
    }
}

滚动事件节流优化

使用节流函数优化滚动事件性能

function throttle(func, limit) {
    let lastFunc;
    let lastRan;
    return function() {
        const context = this;
        const args = arguments;
        if (!lastRan) {
            func.apply(context, args);
            lastRan = Date.now();
        } else {
            clearTimeout(lastFunc);
            lastFunc = setTimeout(function() {
                if ((Date.now() - lastRan) >= limit) {
                    func.apply(context, args);
                    lastRan = Date.now();
                }
            }, limit - (Date.now() - lastRan));
        }
    };
}

window.addEventListener('scroll', throttle(function() {
    // 滚动处理逻辑
}, 100));

标签: 滚动条js
分享给朋友:

相关文章

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现投球

js实现投球

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

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…