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

pointer-point

v2.4.0

Published

Track the point of a pointer

Downloads

5

Readme

pointer-point

Version 2 of pointer-point is a complete restructure of it's functionality. Version 1 documentation has been moved to the onedocs.md file in this project.

Install version 2

npm install pointer-point

Constructor

pointer(element|selector|array|array like)

Acceptable arguments to the constructor:

  • single element
  • single selector
  • array of elements and/or selectors
  • an array like (dom library) of elements

All elements get all events applied to them. When ever an event fires it will be on the applicable element. This means if you set three elements the enter event will fire for one of those element.

The Example

var pointer = require('pointer-point'), divs = document.querySelectorAll('div');
//All of the div elements are added to the pointer.
var point = pointer(divs);
//Change the color for any of the divs depending on events.
point.on('down', function(current, rect){
    current.style.backgroundColor = 'red';
});
point.on('move', function(current, rect){
    if(this.inside(divs[2])){
        //Check some stuff when over the second div..
        console.log('this.h '+this.h);
        console.log('this.v '+this.v);
        console.log('this.speedX '+this.speedX);
    }
});
point.on('up', function(current, rect){
    current.style.backgroundColor = 'violet';
});
point.on('leave', function(current, rect){
    current.style.backgroundColor = 'violet';
});
point.on('enter', function(current, rect){
    current.style.backgroundColor = 'blue';
});
point.on('stroke', function(current, rect){
    console.log('stroke');
});

Alternatively pass an array

//Add specific divs to the pointer.
var point = pointer([divs[1], divs[3]]);

Or just one element

var point = pointer(divs[0]);

Instance Methods

destroy()

Removes all of the events for the pointer.

inside(element)

Is this point inside of the element?

outside(element)

Is this point outside of the element?

add(element|selector)

Add one element, or one element from a selector to the instance.

on(event, data|listener, listener)

Add an event to the point with a listener function.

The third argument is optional.

Some events use the data argument. When passing data you should also pass a callback in the third argument.

Look at the Events documentation to learn more about the data argument.

off(event, listener)

Remove an event with the specified listener function.

Event listener

listener(current, rect)

All events receive the current element the pointer is over, and when the pointer is down. If the pointer is not over an element passed to the pointer-point constructor current is null.

rect argument

All listeners receive a rect argument on the current element if there is one. If the pointer is not over an element that was passed to pointer-point constructor rect is null.

rect is an object that represents the current dismensions of the current element.

rect has the properties of element.getBoundingClientRect(), plus the additional x,y properties which may, or may not be available in certain environments. These are the properties of rect:

  • top
  • right
  • bottom
  • left
  • height
  • width
  • x
  • y

See mozilla for more.

The arguments current, or rect can be null depending on the situation.

rect directions

The rect object also has north, south, east, and west properties.

These properties are oriented from the center of the current element, and are zero based.

Each direction has it's own number line.

Each direction is positive, or negative depending on which quandrant of a DOM element the pointer (mouse or touch) of pointer-point is in. Here is an image showing how the number lines work for these directions.

Directions

For instance crossing below the horizontal line makes north negative. Crossing above makes north positive. The numbers are the reverse for south. At the horizontal line south, and north are zero.

These directions can be used for controls that might need specific vectors. This can be helpful for things like pointer movements relative to the center of the element, and finding the positions of elements relative to the current element under the pointer.

Events

The term pointer refers to a mouse, or touch.

The term mutual means an event is dependent on if the pointer is over one of the elements.

Non-mutual events will sometimes have their current, rect arguments set to null if the pointer is not over an element. Some mutual events will get this effect too depending on where in the DOM the event fired.

This behavior of mutual events is hard to explain, but it is consistent so you shouldn't have a problem figuring out when this is applicable. mutual behavior is much like how traditional mouse events work except for the rect argument which only gets passed on down, or enter if the pointer went down on one of the elements passed to the constructor.

down

The pointer went down. mutual

up

The pointer went up. up is mutual, but can also fire when not over an element if the pointer was down when it was over that element.

move

The pointer is moving. Unlike a normal mousemove this is fired globally.

leave

The pointer leaves one of the elements. mutual even though it's leaving the element.

enter

The pointer enters one of the elements. mutual

stroke

The pointer is down, moving, and over one of the elements. mutual

stroke can fire after down, and enter.

hold

hold uses the data argument. hold fires when the pointer is up after it has been down a certain time.

The default time is two seconds, or 2000 milliseconds.

The hold examples:

point.on('hold', function(element, rect){
    //Stuff
});

Or you can specify a hold time in milliseconds.

//hold for 3 seconds.
point.on('hold', 3000, function(element, rect){
    //Stuff
});

Instance Properties

x, y

The coordinates of the pointer.

h, v

When direction is the pointer moving from it's last position. Their values are strings.

h is the horizontal position (left, right). v is the vertical position (up, down).

down

Is the pointer down.

up

Is the pointer up.

select

Should the elements be selectable? The default for select is true.

speedX

The pointer speed in pixels per second in the x axis.

speedY

The pointer speed in pixels per second in the y axis.

speedX, and speedY are experimental. Don't use these if you don't want your stuff to break.

Instance Properties Effected By Down State

These properties are set to null when the pointer isn't down.

current

The current element the pointer is over. This can still be set if the pointer went down then is moved outside the element. current is set to null on pointer up.

origin

Set when the pointer went down over one of the elements passed to the constructor.

origin records the first element where the pointer went down.

previous

Like origin, but records any elements the pointer leaves.

Caveats

Internally pointer-point uses events to track pointer position so until the cursor is moved, or there is a touch there will be no x/y positions. This shouldn't be a problem in most situations.