mouse-follower-cube
Version:
A powerful javascript library to create amazing and smooth effects for the mouse cursor on your website.
520 lines • 14.6 kB
TypeScript
/*!
* Cuberto Mouse Follower
* https://cuberto.com/
*
* @version 1.1.2
* @author Cuberto, Artem Dordzhiev (Draft)
*/
export default class MouseFollower {
/**
* @typedef {Object} MouseFollowerOptions
* @property {string|HTMLElement|null} [el] Existed cursor element.
* @property {string|HTMLElement|null} [container] Cursor container.
* @property {string} [className] Cursor root element class name.
* @property {string} [innerClassName] Inner element class name.
* @property {string} [textClassName] Text element class name.
* @property {string} [mediaClassName] Media element class name.
* @property {string} [mediaBoxClassName] Media inner element class name.
* @property {string} [iconSvgClassName] SVG sprite class name.
* @property {string} [iconSvgNamePrefix] SVG sprite icon class name prefix.
* @property {string} [iconSvgSrc] SVG sprite source.
* @property {string|null} [dataAttr] Name of data attribute for changing cursor state directly in HTML.
* @property {string} [hiddenState] Hidden state name.
* @property {string} [textState] Text state name.
* @property {string} [iconState] Icon state name.
* @property {string|null} [activeState] Active (mousedown) state name. Set false to disable.
* @property {string} [mediaState] Media (image/video) state name.
* @property {Object} [stateDetection] State detection rules.
* @property {boolean} [visible] Is cursor visible by default.
* @property {boolean} [visibleOnState] Automatically show/hide cursor when state added.
* @property {number} [speed] Cursor movement speed.
* @property {string} [ease] Timing function of cursor movement.
* @property {boolean} [overwrite] Overwrite or remain cursor position when `mousemove` event happens.
* @property {number} [skewing] Default skewing factor.
* @property {number} [skewingText] Skewing effect factor in a text state.
* @property {number} [skewingIcon] Skewing effect factor in a icon state.
* @property {number} [skewingMedia] Skewing effect factor in a media (image/video) state.
* @property {number} [skewingDelta] Skewing effect base delta.
* @property {number} [skewingDeltaMax] Skew effect max delta.
* @property {number} [stickDelta] Stick effect delta.
* @property {number} [showTimeout] Delay before show.
* @property {boolean} [hideOnLeave] Hide the cursor when mouse leave container.
* @property {number} [hideTimeout] Delay before hiding. It should be equal to the CSS hide animation time.
* @property {number[]} [initialPos] Array (x, y) of initial cursor position.
*/
/**
* Register GSAP animation library.
*
* @param {gsap} gsap GSAP library.
*/
static registerGSAP(gsap: any): void;
/**
* Create cursor instance.
*
* @param {MouseFollowerOptions} [options] Cursor options.
*/
constructor(options?: {
/**
* Existed cursor element.
*/
el?: string | HTMLElement | null;
/**
* Cursor container.
*/
container?: string | HTMLElement | null;
/**
* Cursor root element class name.
*/
className?: string;
/**
* Inner element class name.
*/
innerClassName?: string;
/**
* Text element class name.
*/
textClassName?: string;
/**
* Media element class name.
*/
mediaClassName?: string;
/**
* Media inner element class name.
*/
mediaBoxClassName?: string;
/**
* SVG sprite class name.
*/
iconSvgClassName?: string;
/**
* SVG sprite icon class name prefix.
*/
iconSvgNamePrefix?: string;
/**
* SVG sprite source.
*/
iconSvgSrc?: string;
/**
* Name of data attribute for changing cursor state directly in HTML.
*/
dataAttr?: string | null;
/**
* Hidden state name.
*/
hiddenState?: string;
/**
* Text state name.
*/
textState?: string;
/**
* Icon state name.
*/
iconState?: string;
/**
* Active (mousedown) state name. Set false to disable.
*/
activeState?: string | null;
/**
* Media (image/video) state name.
*/
mediaState?: string;
/**
* State detection rules.
*/
stateDetection?: any;
/**
* Is cursor visible by default.
*/
visible?: boolean;
/**
* Automatically show/hide cursor when state added.
*/
visibleOnState?: boolean;
/**
* Cursor movement speed.
*/
speed?: number;
/**
* Timing function of cursor movement.
*/
ease?: string;
/**
* Overwrite or remain cursor position when `mousemove` event happens.
*/
overwrite?: boolean;
/**
* Default skewing factor.
*/
skewing?: number;
/**
* Skewing effect factor in a text state.
*/
skewingText?: number;
/**
* Skewing effect factor in a icon state.
*/
skewingIcon?: number;
/**
* Skewing effect factor in a media (image/video) state.
*/
skewingMedia?: number;
/**
* Skewing effect base delta.
*/
skewingDelta?: number;
/**
* Skew effect max delta.
*/
skewingDeltaMax?: number;
/**
* Stick effect delta.
*/
stickDelta?: number;
/**
* Delay before show.
*/
showTimeout?: number;
/**
* Hide the cursor when mouse leave container.
*/
hideOnLeave?: boolean;
/**
* Delay before hiding. It should be equal to the CSS hide animation time.
*/
hideTimeout?: number;
/**
* Array (x, y) of initial cursor position.
*/
initialPos?: number[];
});
/** @type {MouseFollowerOptions} **/
options: {
/**
* Existed cursor element.
*/
el?: string | HTMLElement | null;
/**
* Cursor container.
*/
container?: string | HTMLElement | null;
/**
* Cursor root element class name.
*/
className?: string;
/**
* Inner element class name.
*/
innerClassName?: string;
/**
* Text element class name.
*/
textClassName?: string;
/**
* Media element class name.
*/
mediaClassName?: string;
/**
* Media inner element class name.
*/
mediaBoxClassName?: string;
/**
* SVG sprite class name.
*/
iconSvgClassName?: string;
/**
* SVG sprite icon class name prefix.
*/
iconSvgNamePrefix?: string;
/**
* SVG sprite source.
*/
iconSvgSrc?: string;
/**
* Name of data attribute for changing cursor state directly in HTML.
*/
dataAttr?: string | null;
/**
* Hidden state name.
*/
hiddenState?: string;
/**
* Text state name.
*/
textState?: string;
/**
* Icon state name.
*/
iconState?: string;
/**
* Active (mousedown) state name. Set false to disable.
*/
activeState?: string | null;
/**
* Media (image/video) state name.
*/
mediaState?: string;
/**
* State detection rules.
*/
stateDetection?: any;
/**
* Is cursor visible by default.
*/
visible?: boolean;
/**
* Automatically show/hide cursor when state added.
*/
visibleOnState?: boolean;
/**
* Cursor movement speed.
*/
speed?: number;
/**
* Timing function of cursor movement.
*/
ease?: string;
/**
* Overwrite or remain cursor position when `mousemove` event happens.
*/
overwrite?: boolean;
/**
* Default skewing factor.
*/
skewing?: number;
/**
* Skewing effect factor in a text state.
*/
skewingText?: number;
/**
* Skewing effect factor in a icon state.
*/
skewingIcon?: number;
/**
* Skewing effect factor in a media (image/video) state.
*/
skewingMedia?: number;
/**
* Skewing effect base delta.
*/
skewingDelta?: number;
/**
* Skew effect max delta.
*/
skewingDeltaMax?: number;
/**
* Stick effect delta.
*/
stickDelta?: number;
/**
* Delay before show.
*/
showTimeout?: number;
/**
* Hide the cursor when mouse leave container.
*/
hideOnLeave?: boolean;
/**
* Delay before hiding. It should be equal to the CSS hide animation time.
*/
hideTimeout?: number;
/**
* Array (x, y) of initial cursor position.
*/
initialPos?: number[];
};
gsap: any;
el: Element;
container: Element;
skewing: number;
pos: {
x: number;
y: number;
};
vel: {
x: number;
y: number;
};
event: {};
events: any[];
/**
* Init cursor.
*/
init(): void;
ticker: any;
/**
* Create cursor DOM element and append to container.
*/
create(): void;
inner: HTMLDivElement;
text: HTMLDivElement;
media: HTMLDivElement;
mediaBox: HTMLDivElement;
/**
* Create GSAP setters.
*/
createSetter(): void;
setter: {
x: any;
y: any;
scaleX: any;
scaleY: any;
wc: any;
inner: {};
};
/**
* Create and attach events.
*/
bind(): void;
/**
* Render the cursor in a new position.
*
* @param {boolean} [force=false] Force render.
*/
render(force?: boolean): void;
/**
* Show cursor.
*/
show(): void;
visibleInt: NodeJS.Timeout;
visible: boolean;
/**
* Hide cursor.
*/
hide(): void;
/**
* Toggle cursor.
*
* @param {boolean} [force] Force state.
*/
toggle(force?: boolean): void;
/**
* Add state/states to the cursor.
*
* @param {string} state State name.
*/
addState(state: string): void;
/**
* Remove state/states from cursor.
*
* @param {string} state State name.
*/
removeState(state: string): void;
/**
* Toggle cursor state.
*
* @param {string} state State name.
* @param {boolean} [force] Force state.
*/
toggleState(state: string, force?: boolean): void;
/**
* Set factor of skewing effect.
*
* @param {number} value Skewing factor.
*/
setSkewing(value: number): void;
/**
* Reverts skewing factor to default.
*/
removeSkewing(): void;
/**
* Stick cursor to the element.
*
* @param {string|HTMLElement} element Element or selector.
*/
setStick(element: string | HTMLElement): void;
stick: boolean | {
y: number;
x: number;
};
/**
* Unstick cursor from the element.
*/
removeStick(): void;
/**
* Transform cursor to text mode with a given string.
*
* @param {string} text Text.
*/
setText(text: string): void;
/**
* Reverts cursor from text mode.
*/
removeText(): void;
/**
* Transform cursor to svg icon mode.
*
* @param {string} name Icon identifier.
* @param {string} [style=""] Additional SVG styles.
*/
setIcon(name: string, style?: string): void;
/**
* Reverts cursor from icon mode.
*/
removeIcon(): void;
/**
* Transform cursor to media mode with a given element.
*
* @param {HTMLElement} element Element.
*/
setMedia(element: HTMLElement): void;
mediaInt: NodeJS.Timeout;
/**
* Revert cursor from media mode.
*/
removeMedia(): void;
/**
* Transform cursor to image mode.
*
* @param {string} url Image url.
*/
setImg(url: string): void;
mediaImg: HTMLImageElement;
/**
* Reverts cursor from image mode.
*/
removeImg(): void;
/**
* Transform cursor to video mode.
*
* @param {string} url Video url.
*/
setVideo(url: string): void;
mediaVideo: HTMLVideoElement;
/**
* Reverts cursor from video mode.
*/
removeVideo(): void;
/**
* Attach an event handler function.
*
* @param {string} event Event name.
* @param {function} callback Callback.
*/
on(event: string, callback: Function): void;
/**
* Remove an event handler.
*
* @param {string} event Event name.
* @param {function} [callback] Callback.
*/
off(event: string, callback?: Function): void;
/**
* Execute all handlers for the given event type.
*
* @param {string} event Event name.
* @param params Extra parameters.
*/
trigger(event: string, ...params: any[]): void;
/**
* Get cursor options from data attribute of a given element.
*
* @param {HTMLElement} element Element.
* @return {Object} Options.
*/
getFromDataset(element: HTMLElement): any;
/**
* Destroy cursor instance.
*/
destroy(): void;
}
//# sourceMappingURL=index.d.ts.map