UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

121 lines (118 loc) 3.32 kB
import { Point } from '../maths/point/Point.mjs'; import { ViewContainer } from '../scene/view/ViewContainer.mjs'; "use strict"; class DOMContainer extends ViewContainer { /** * @param options - The options for creating the DOM container. */ constructor(options = {}) { const { element, anchor, ...rest } = options; super({ label: "DOMContainer", ...rest }); /** @internal */ this.renderPipeId = "dom"; /** @internal */ this.batched = false; this._anchor = new Point(0, 0); if (anchor) { this.anchor = anchor; } this.element = options.element || document.createElement("div"); } /** * The anchor sets the origin point of the container. * Controls the relative positioning of the DOM element. * * The default is `(0,0)`, this means the container's origin is the top left. * Setting the anchor to `(0.5,0.5)` means the container's origin is centered. * Setting the anchor to `(1,1)` would mean the container's origin point will be the bottom right corner. * @example * ```ts * const container = new DOMContainer(); * * // Set anchor to center (shorthand) * container.anchor = 0.5; * * // Set anchor to bottom-right * container.anchor = { x: 1, y: 1 }; * * // Set anchor to custom position * container.anchor = new Point(0.3, 0.7); * ``` */ get anchor() { return this._anchor; } /** * Sets the anchor point of the container. * @param value - New anchor value: * - number: Sets both x and y to same value * - PointData: Sets x and y separately */ set anchor(value) { typeof value === "number" ? this._anchor.set(value) : this._anchor.copyFrom(value); } /** * Sets the DOM element for this container. * This will replace the current element and update the view. * @param value - The new DOM element to use * @example * ```ts * const domContainer = new DOMContainer(); * domContainer.element = document.createElement('input'); * ``` */ set element(value) { if (this._element === value) return; this._element = value; this.onViewUpdate(); } /** * The DOM element associated with this container. * @example * ```ts * const domContainer = new DOMContainer(); * domContainer.element.innerHTML = 'Hello World!'; * document.body.appendChild(domContainer.element); * ``` */ get element() { return this._element; } /** @private */ updateBounds() { const bounds = this._bounds; const element = this._element; if (!element) { bounds.minX = 0; bounds.minY = 0; bounds.maxX = 0; bounds.maxY = 0; return; } const { offsetWidth, offsetHeight } = element; bounds.minX = 0; bounds.maxX = offsetWidth; bounds.minY = 0; bounds.maxY = offsetHeight; } /** * Destroys this DOM container. * @param options - Options parameter. A boolean will act as if all options * have been set to that * @example * domContainer.destroy(); * domContainer.destroy(true); */ destroy(options = false) { super.destroy(options); this._element?.parentNode?.removeChild(this._element); this._element = null; this._anchor = null; } } export { DOMContainer }; //# sourceMappingURL=DOMContainer.mjs.map