DOM Element Game Objects are a way to control and manipulate HTML Elements over the top of your game.
In order for DOM Elements to display you have to enable them by adding the following to your game configuration object:
dom {
createContainer: true
}
When this is added, Phaser will automatically create a DOM Container div that is positioned over the top of the game canvas. This div is sized to match the canvas, and if the canvas size changes, as a result of settings within the Scale Manager, the dom container is resized accordingly.
You can create a DOM Element by either passing in DOMStrings, or by passing in a reference to an existing Element that you wish to be placed under the control of Phaser. For example:
this.add.dom(x, y, 'div', 'background-color: lime; width: 220px; height: 100px; font: 48px Arial', 'Phaser');
The above code will insert a div element into the DOM Container at the given x/y coordinate. The DOMString in the 4th argument sets the initial CSS style of the div and the final argument is the inner text. In this case, it will create a lime colored div that is 220px by 100px in size with the text Phaser in it, in an Arial font.
You should nearly always, without exception, use explicitly sized HTML Elements, in order to fully control alignment and positioning of the elements next to regular game content.
Rather than specify the CSS and HTML directly you can use the load.html
File Loader to load it into the
cache and then use the createFromCache
method instead. You can also use createFromHTML
and various other
methods available in this class to help construct your elements.
Once the element has been created you can then control it like you would any other Game Object. You can set its position, scale, rotation, alpha and other properties. It will move as the main Scene Camera moves and be clipped at the edge of the canvas. It's important to remember some limitations of DOM Elements: The obvious one is that they appear above or below your game canvas. You cannot blend them into the display list, meaning you cannot have a DOM Element, then a Sprite, then another DOM Element behind it.
They also cannot be enabled for input. To do that, you have to use the addListener
method to add native event
listeners directly. The final limitation is to do with cameras. The DOM Container is sized to match the game canvas
entirely and clipped accordingly. DOM Elements respect camera scrolling and scrollFactor settings, but if you
change the size of the camera so it no longer matches the size of the canvas, they won't be clipped accordingly.
Also, all DOM Elements are inserted into the same DOM Container, regardless of which Scene they are created in.
DOM Elements are a powerful way to align native HTML with your Phaser Game Objects. For example, you can insert a login form for a multiplayer game directly into your title screen. Or a text input box for a highscore table. Or a banner ad from a 3rd party service. Or perhaps you'd like to use them for high resolution text display and UI. The choice is up to you, just remember that you're dealing with standard HTML and CSS floating over the top of your game, and should treat it accordingly.
Note: This method will only be available if the DOM Element Game Object has been built into Phaser.
name | type | arguments | description |
---|---|---|---|
x | number |
The horizontal position of this DOM Element in the world. |
|
y | number |
The vertical position of this DOM Element in the world. |
|
element | HTMLElement | string | <optional> |
An existing DOM element, or a string. If a string starting with a # it will do a |
style | string | any | <optional> |
If a string, will be set directly as the elements |
innerText | string | <optional> |
If given, will be set directly as the elements |
The Game Object that was created.