当前位置:首页 > JavaScript

js实现滚轮

2026-04-06 06:47:59JavaScript

监听滚轮事件

在JavaScript中,可以通过addEventListener监听wheel事件来捕获滚轮动作。该事件会在用户滚动鼠标滚轮时触发,提供滚动方向和速度等信息。

window.addEventListener('wheel', function(event) {
    console.log(event.deltaY); // 垂直滚动量(正值向下,负值向上)
    console.log(event.deltaX); // 水平滚动量(正值向右,负值向左)
});

阻止默认滚动行为

如果需要自定义滚动效果(如横向滚动或缩放),可以通过event.preventDefault()阻止默认的页面滚动行为:

js实现滚轮

window.addEventListener('wheel', function(event) {
    event.preventDefault();
    // 自定义逻辑(如横向滚动)
    window.scrollBy(event.deltaY, 0); // 将垂直滚动转为水平滚动
}, { passive: false }); // 必须设置passive为false才能调用preventDefault

平滑滚动实现

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

js实现滚轮

const button = document.getElementById('scrollButton');
button.addEventListener('click', () => {
    window.scrollTo({
        top: 1000, // 目标位置
        behavior: 'smooth'
    });
});

自定义滚动动画

通过requestAnimationFrame实现更复杂的滚动动画,例如缓动效果:

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

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

    function easeInOutCubic(t) {
        return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
    }

    requestAnimationFrame(animation);
}

// 调用示例
smoothScrollTo(500);

横向滚动容器

对于横向滚动的容器(如图库),监听滚轮事件并修改容器的scrollLeft属性:

const gallery = document.getElementById('horizontalGallery');
gallery.addEventListener('wheel', (event) => {
    event.preventDefault();
    gallery.scrollLeft += event.deltaY; // 垂直滚轮控制横向滚动
});

兼容性注意事项

  • 部分旧浏览器可能使用mousewheel事件而非wheel,可通过以下代码兼容:
    const eventName = 'onwheel' in document ? 'wheel' : 'mousewheel';
    element.addEventListener(eventName, handler);
  • 触摸板手势可能触发高频率的微小deltaY值,需在逻辑中增加阈值判断。

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

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js jquery

js jquery

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

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js 实现页面刷新

js 实现页面刷新

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