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 🙏

© 2024 – Pkg Stats / Ryan Hefner

touches

v1.2.2

Published

simplified touch/mouse events for flick and swipe

Downloads

684

Readme

touches

stable

(click for demo) - (source)

Normalizes touch and mouse events to provide a simpler interface. Simplest case:

//get mouse/touch events on window
require('touches')()
  .on('start', mouseDown)   //-> mousedown / touchstart
  .on('move', mouseMove)    //-> mousemove / touchmove
  .on('end', mouseEnd)      //-> mouseup   / touchend

...

A common pattern for drag events is to listen for events on a parent element (like the window), and use a different element as the target for client offset calculation. The second argument to the event listener is a [x, y] vector representing the calculated client offset (relative to top left of target element).

var touch = require('touches')
touch(window, { target: button })
  .on('move', function (ev, position) {
      console.log('relative pos', position[0], position[1])
  })

Another common pattern, especially with drag events, is filtering touch input to a single finger. Below; the events will only get fired for the first finger placed on the screen. Subsequent fingers will be ignored until after the first finger has been lifted.

touch(window, { target: button, filtered: true })
  .on('start', dragStart)
  .on('move', dragMove)
  .on('end', dragEnd)

Usage

NPM

emitter = require('touches')([element, opt])

Creates a new drag emitter by attaching listeners to element, which defaults to window.

The opt options can be:

  • target the element to use when calculating the position parameter passed to event listeners. The clientX/clientY of the event will be relative to this target
  • filtered whether the touch events should be filtered to the first placed finger
  • type can be a string, either "mouse" or "touch" if listening to only one or the other event is desired. If any other value, will listen for both mouse and touch.
  • preventSimulated (default true) if true, prevents simulated touch events by running ev.preventDefault() on 'touchend' events

If the events are not filtered, the position for an event will be the first changed touch associated with the target.

emitter.disable()

Disables the events associated with this emitter by removing them from the DOM element. Returns the emitter for chaining.

emitter.enable()

Enables the events associated with this emitter by adding them to the DOM element. The emitter is enabled by default. Returns the emitter for chaining.

emitter.target

The current target for position offset calculation.

emitter.on('start', listener)

emitter.on('move', listener)

emitter.on('end', listener)

The mousedown/touchstart, mousemove/touchmove, and mouseup/touchend events, respectively. Listeners are called with two parameters: (ev, position) where ev is the event and position is an [x, y] array of the client offset, relative to the target's top left.

demo

To run the demo from source, first git clone this repo, then:

cd touches
npm install
npm start

And open localhost:9966 in your browser.

To generate a distribution bundle:

npm run build

License

MIT, see LICENSE.md for details.