npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mauricelam/trackormouse

v1.0.1

Published

Detect mouse wheel vs trackpad input

Downloads

299

Readme

trackormouse

npm

A library for detecting whether the current input is from a physical mouse or trackpad based on javascript wheel events.

Since browsers do not provide a direct API signal indicating the type of pointing device, this library uses heuristics to determine that.

Usage

import { WheelClassifier } from 'trackormouse'

const classifier = new WheelClassifier()

window.addEventListener('wheel', (e) => {
    classifier.addEvent(e)

    const deviceType = classifier.inferDeviceType()
    console.log('Detected device type:', deviceType)
})

Signals

The signals used to determine the pointing device type is exposed via the WheelClassifier class, which allows usages to customize the classification based on their specific needs.

For example, some use cases may want to set a minimum number of events before changing the configuration based on the inferred device type, or disable filter by horizontal scrolling.

  • deltaXEvents: Number of events that contains non-zero delta X.
  • deltaXAndYEvents: Number of events that contain both non-zero delta X and non-zero delta Y at the same time.
  • deltaYLooksLikeTick: Number of events where the deltaY looks like a wheel tick. This is determined by checking deltaY against known constants per-platform that translates a traditional mouse wheel tick into pixel-deltas.
  • deltaYFractional: Number of events where the deltaY contains non-integer values.
  • deltaModeNotPixels: Number of events where the deltaMode is not pixels.
  • numEvents: Total number of accumulated events.
  • peakEventsPerSec: Peak number of events received within a 1-second window.

The default classification heuristic used by inferDeviceType() is as follows:

  1. Any events with deltaMode != PIXEL → 'mouse'
  2. Any events with fractional deltaY → 'trackpad'
  3. Any events with both non-zero deltaX and deltaY → 'trackpad'
  4. Any events with non-zero deltaX → 'trackpad'
  5. Any events with deltaY that doesn't look like a tick → 'trackpad'
  6. Otherwise → 'mouse'