TODO…
The slide() function is a useful utility for listening to pointer event gestures, e.g. to make
an element draggable:
import {Point} from '@mathigon/fermat';
import {slide, $} from '@mathigon/boost';
const $target = $('.my-element');
slide($target, {
down: (posn: Point) => {
// Executed on mouse/touch/pointerdown
},
start: (posn: Point) => {
// Executed just before starting to move the pointer
},
move: (posn: Point, start: Point, last: Point) => {
// Executed on every frame while sliding, including outside of the original $target.
// You can always access the start position of the gesture, and the last position
// with which the move() function was called as arguments of this function.
const distance = Point.distance(posn, last);
},
end: (posn: Point) => {
// Executed on mouse/touch/pointerup, after a sliding gesture.
},
click: (posn: Point) => {
// Executed on mouse/touch/pointerup, if there was no sliding gesture and the
// user simply clicked.
}
});If $target is a simple HTML element, the posn values will always be pixel distanced from the
top-left corner of the browser. if $target is an SVG or CANVAS element, the posn values will be
in the coordinate system of that element. This includes automatically inverting any transformations
applied to the element (e.g. scaling).
You can watch changes to element attributes using the .onAttr() method:
import {slide, $} from '@mathigon/boost';
const $target = $('.my-element');
$target.onAttr('style', (style: string) => {
console.log(style);
});The callback is executed once immediately when binding the event listener, with the current value of
the corresponding attribute. In that case, a second initial: boolean parameter is passed to the
callback with value true.
TODO…
TODO…