UNPKG

leaflet

Version:

JavaScript library for mobile-friendly interactive maps

127 lines (126 loc) • 4.49 kB
import { Evented } from '../core/Events.js'; import { Point } from '../geometry/Point.js'; import type { Defaults, DragEndEvent, DraggableDefaults, DraggableEventMap, DraggableOptions, LeafletEvent } from '../types.js'; /** @import {Defaults, DragEndEvent, DraggableDefaults, DraggableEventMap, DraggableOptions, LeafletEvent} from '../types.js' */ declare const defaultOptions: { /** * The max number of pixels a user can shift the pointer during a click for * it to be considered a valid click (as opposed to a pointer drag). */ clickTolerance: number; }; export type DraggableDefaultsValues = typeof defaultOptions; export type DraggableEvents = { /** * Fired when a drag is about to start. */ down: LeafletEvent; /** * Fired when a drag starts */ dragstart: LeafletEvent; /** * Fired continuously during dragging *before* each corresponding update of the * element's position. */ predrag: LeafletEvent; /** * Fired continuously during dragging. */ drag: LeafletEvent; /** * Fired when the drag ends. */ dragend: DragEndEvent; }; export type DragEndEventProps = { /** * The distance in pixels the draggable element was moved by. */ distance: number; /** * Whether the drag should end without inertia (set when the * draggable is disabled mid-drag). */ noInertia?: boolean; }; /** @typedef {typeof defaultOptions} DraggableDefaultsValues */ /** * @typedef {Object} DraggableEvents * @property {LeafletEvent} down Fired when a drag is about to start. * @property {LeafletEvent} dragstart Fired when a drag starts * @property {LeafletEvent} predrag Fired continuously during dragging *before* each corresponding update of the * element's position. * @property {LeafletEvent} drag Fired continuously during dragging. * @property {DragEndEvent} dragend Fired when the drag ends. */ /** * @typedef {Object} DragEndEventProps * @property {number} distance The distance in pixels the draggable element was moved by. * @property {boolean} [noInertia] Whether the drag should end without inertia (set when the * draggable is disabled mid-drag). */ /** * A class for making DOM elements draggable. Used internally * for map and marker dragging. Works on any DOM element * @example * ```js * const draggable = new Draggable(elementToDrag); * draggable.enable(); * ``` * * @extends {Evented<DraggableOptions & DraggableDefaults, DraggableEventMap>} */ export declare class Draggable extends Evented<DraggableOptions & DraggableDefaults, DraggableEventMap> { _element: HTMLElement; _dragStartTarget: HTMLElement; _enabled: boolean | undefined; _moved: boolean | undefined; /** @type {Point} */ _startPoint: Point; /** @type {Point} */ _startPos: Point; /** @type {{x: number, y: number}} */ _parentScale: { x: number; y: number; }; _draggingContainer: Element | null | undefined; /** @type {Element | null} */ _lastTarget: Element | null; /** @type {Point} */ _newPos: Point; _moving: boolean | undefined; _lastEvent: PointerEvent | undefined; static initHooks: boolean; /** @type {Defaults<DraggableOptions>} */ static defaultOptions: Defaults<DraggableOptions>; /** @type {Draggable | false} */ static _dragging: Draggable | false; /** * Creates a `Draggable` object for moving `element` when you start dragging * the `dragStartTarget` element (equals `element` itself by default). * @param {HTMLElement} element * @param {HTMLElement} [dragStartTarget] * @param {Partial<DraggableOptions>} [options] */ constructor(element: HTMLElement, dragStartTarget?: HTMLElement, options?: Partial<DraggableOptions>); /** Enables the dragging ability */ enable(): void; /** Disables the dragging ability */ disable(): void; /** @param {PointerEvent} e */ _onDown(e: PointerEvent): void; /** @param {PointerEvent} e */ _onMove(e: PointerEvent): void; _updatePosition(): void; /** @param {PointerEvent} e */ _onUp(e: PointerEvent): void; /** * Ends the current drag, firing `dragend` if the element was moved. `noInertia` is passed on in the event, so * that the map doesn't keep panning after a drag ended this way. * @param {boolean} [noInertia] */ finishDrag(noInertia?: boolean): void; } export {};