当前位置:首页 > JavaScript

js实现滚轮

2026-02-01 14:00:32JavaScript

监听滚轮事件

在JavaScript中,可以通过addEventListener来监听滚轮事件。使用wheel事件可以捕获鼠标滚轮的滚动行为。

window.addEventListener('wheel', function(event) {
    console.log(event.deltaY); // 输出垂直方向的滚动量
    // 其他逻辑处理
});

event.deltaY表示垂直方向的滚动量,正值表示向下滚动,负值表示向上滚动。event.deltaX表示水平方向的滚动量。

阻止默认滚动行为

如果需要阻止默认的滚动行为(例如实现自定义滚动效果),可以调用event.preventDefault()

window.addEventListener('wheel', function(event) {
    event.preventDefault();
    // 自定义滚动逻辑
});

平滑滚动实现

使用window.scrollTo可以实现平滑滚动效果。通过设置behavior: 'smooth'可以让滚动动画更流畅。

window.scrollTo({
    top: 1000, // 滚动到指定位置
    behavior: 'smooth' // 平滑滚动
});

自定义滚动动画

如果需要更复杂的滚动动画,可以使用requestAnimationFrame逐帧控制滚动位置。

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

    function scrollStep(timestamp) {
        const elapsed = timestamp - startTime;
        const progress = Math.min(elapsed / duration, 1);
        window.scrollTo(0, startY + distance * progress);

        if (progress < 1) {
            requestAnimationFrame(scrollStep);
        }
    }

    requestAnimationFrame(scrollStep);
}

// 调用示例
smoothScrollTo(1000);

检测滚动方向

通过比较当前滚动位置和上一次滚动位置,可以判断滚动方向。

let lastScrollY = window.scrollY;

window.addEventListener('scroll', function() {
    const currentScrollY = window.scrollY;
    if (currentScrollY > lastScrollY) {
        console.log('向下滚动');
    } else {
        console.log('向上滚动');
    }
    lastScrollY = currentScrollY;
});

节流优化滚动事件

滚动事件可能触发频繁,使用节流(throttle)可以优化性能。

function throttle(func, limit) {
    let inThrottle;
    return function() {
        const args = arguments;
        const context = this;
        if (!inThrottle) {
            func.apply(context, args);
            inThrottle = true;
            setTimeout(() => inThrottle = false, limit);
        }
    };
}

window.addEventListener('scroll', throttle(function() {
    console.log('节流后的滚动事件');
}, 100));

滚动到指定元素

使用element.scrollIntoView可以让页面滚动到指定元素的位置。

document.getElementById('target-element').scrollIntoView({
    behavior: 'smooth'
});

获取滚动位置

通过window.scrollYwindow.scrollX可以获取当前页面的滚动位置。

console.log('垂直滚动位置:', window.scrollY);
console.log('水平滚动位置:', window.scrollX);

滚动事件兼容性

对于旧版浏览器,可以使用mousewheelDOMMouseScroll事件作为备选方案。

js实现滚轮

window.addEventListener('mousewheel', handleWheel); // Chrome, Safari
window.addEventListener('DOMMouseScroll', handleWheel); // Firefox

function handleWheel(event) {
    const delta = event.detail ? -event.detail : event.wheelDelta;
    console.log(delta);
}

标签: 滚轮js
分享给朋友:

相关文章

js 实现vue

js 实现vue

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

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现祖玛

js实现祖玛

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

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…