0.6.6 • Published 6 years ago

@hscmap/inertial-wheel v0.6.6

Weekly downloads
1
License
-
Repository
github
Last release
6 years ago

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()
    }
}
0.6.6

6 years ago

0.6.5

6 years ago

0.6.3

7 years ago

0.6.2

7 years ago

0.6.1

7 years ago

0.6.0

7 years ago

0.5.5

7 years ago

0.5.4

7 years ago

0.5.3

7 years ago

0.5.2

7 years ago

0.5.1

7 years ago

0.5.0

7 years ago

0.4.0

7 years ago

0.2.0

7 years ago

0.1.0

7 years ago

0.0.0

7 years ago