@hscmap/inertial-wheel

* InertialWheel wraps native WheelEvent and emits pseudo wheel events with inertial motion. * [Working Demo](https://michitaro.github.io/inertial-wheel)

Stats

StarsIssuesVersionUpdatedCreatedSize
@hscmap/inertial-wheel
0.6.64 years ago4 years agoMinified + gzip package size for @hscmap/inertial-wheel in KB

Readme

InertialWheel

  • InertialWheel wraps native WheelEvent and emits pseudo wheel events with inertial motion.
  • Working Demo

Install

npm instasll --save @hscmap/inertial-wheel

Example (source code of the working demo)

import { InertialWheel } from "@hscmap/inertial-wheel"


window.addEventListener('load', e => {
    const trackpad = document.querySelector('.trackpad') as HTMLDivElement

    const inertialWheelEventHistory = new HistoryCanvas(document.querySelector('#inertial-event-history') as HTMLCanvasElement)
    new InertialWheel(trackpad, {
        wheel: e => inertialWheelEventHistory.push(e.v),
        wheelstart: e => inertialWheelEventHistory.canvas.classList.add('active'),
        wheelend: e => inertialWheelEventHistory.canvas.classList.remove('active'),
    })

    const nativeEventHistory = new HistoryCanvas(document.querySelector('#native-event-history') as HTMLCanvasElement)
    trackpad.addEventListener('wheel', e => {
        e.preventDefault()
        nativeEventHistory.push(e.deltaY)
    })
})


class HistoryCanvas {
    private ctx: CanvasRenderingContext2D
    private ys: number[] = []

    constructor(readonly canvas: HTMLCanvasElement) {
        this.initCanvas()
        this.refresh()
    }

    private initCanvas() {
        this.canvas.width = 500
        this.canvas.height = 200
        this.ctx = this.canvas.getContext('2d')!
    }

    push(y: number) {
        this.ys.unshift(y)
        this.ys.splice(this.canvas.width)
        this.refresh()
    }

    private refresh() {
        const ctx = this.ctx
        const canvas = this.canvas
        const y0 = this.canvas.height / 2

        ctx.clearRect(0, 0, canvas.width, canvas.height)

        ctx.strokeStyle = '#777'
        ctx.beginPath()
        ctx.lineTo(0, y0)
        ctx.lineTo(this.canvas.width, y0)
        ctx.stroke()

        ctx.strokeStyle = 'rgba(255, 0, 0, 0.5)'
        ctx.beginPath()
        for (let i = 0; i < this.ys.length; ++i)
            ctx.lineTo(i, this.ys[i] + y0)
        ctx.stroke()
    }
}

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.