From bb86ae48b4d020f5ad2839143dcfc69d32f5d7c9 Mon Sep 17 00:00:00 2001 From: Baz Utsahajit Date: Tue, 21 May 2024 16:28:53 +0700 Subject: [PATCH] Feat: Expose trackpad's axis values and add a `scrollToPosition` method --- src/ScrollBox.ts | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/ScrollBox.ts b/src/ScrollBox.ts index 8819b487..ed805c66 100644 --- a/src/ScrollBox.ts +++ b/src/ScrollBox.ts @@ -1,4 +1,4 @@ -import { ColorSource, Ticker, utils, Point } from '@pixi/core'; +import { ColorSource, Ticker, utils, Point, IPointData } from '@pixi/core'; import { Container, DisplayObject, IDestroyOptions } from '@pixi/display'; import { EventMode, FederatedPointerEvent } from '@pixi/events'; import { Graphics } from '@pixi/graphics'; @@ -693,6 +693,21 @@ export class ScrollBox extends Container this.stopRenderHiddenItems(); } + /** + * Scrolls to the given position. + * @param position - x and y position object. + * @param position.x - x position. + * @param position.y - y position. + */ + scrollToPosition({ x, y }: Partial) + { + if (x === undefined && y === undefined) return; + this.renderAllItems(); + if (x !== undefined) this.scrollX = -x; + if (y !== undefined) this.scrollY = -y; + this.stopRenderHiddenItems(); + } + /** Gets component height. */ override get height(): number { @@ -721,6 +736,30 @@ export class ScrollBox extends Container this.scrollTop(); } + /** Gets the current raw scroll position on the x-axis (Negated Value). */ + get scrollX(): number + { + return this._trackpad.xAxis.value; + } + + /** Sets the current raw scroll position on the x-axis (Negated Value). */ + set scrollX(value: number) + { + this._trackpad.xAxis.value = value; + } + + /** Gets the current raw scroll position on the y-axis (Negated Value). */ + get scrollY(): number + { + return this._trackpad.yAxis.value; + } + + /** Sets the current raw scroll position on the y-axis (Negated Value). */ + set scrollY(value: number) + { + this._trackpad.yAxis.value = value; + } + protected update() { if (!this.list) return;