L'API HTML-in-Canvas colma il divario tra il mondo interattivo e accessibile del DOM e il controllo ad alte prestazioni a livello di pixel di <canvas>. L'API consente di disegnare sottoalberi DOM attivi direttamente in contesti canvas 2D, WebGL o WebGPU, mentre il browser mantiene l'interattività, gli alberi di accessibilità e le integrazioni a livello di browser.
Per scoprire i vantaggi di HTML-in-Canvas, come migliora le soluzioni alternative precedenti e per quali casi d'uso è più adatto, leggi HTML-in-Canvas in Chrome 157: DOM interattivo all'interno di 2D, WebGL e WebGPU.
Implementa la tua UI con HTML-in-Canvas
Per integrare HTML-in-Canvas nella tua app, puoi:
- Crea un'implementazione diretta utilizzando le API del browser.
- Utilizza un framework che supporti HTML-in-Canvas.
Puoi anche utilizzare un agente di programmazione per aiutarti. Scopri come migliorare la tua esperienza con l'agente di programmazione con Modern Web Guidance.
Implementazione diretta
L'implementazione dipende dal contesto che utilizzi. Prima di iniziare, esamina i concetti tecnici comuni a tutti i contesti, come i contenuti drawable e l'evento paint.
Scopri come disegnare l'immagine dell'elemento in un canvas e aggiornare la geometria dell'elemento per i seguenti contesti:
Supporto di librerie e framework
Diverse librerie popolari hanno aggiunto il supporto sperimentale di HTML-in-Canvas per le texture WebGL e WebGPU, nonché per gli effetti canvas 2D. Consulta la documentazione di ogni libreria per conoscere lo stato di supporto attuale e i dettagli di implementazione.
Three.js
L'aggiornamento manuale delle matrici può essere noioso, quindi i framework stanno aggiungendo il supporto integrato. Ad esempio, Three.js fornisce un supporto sperimentale utilizzando THREE.HTMLTexture:
const material = new THREE.MeshBasicMaterial();
material.map = new THREE.HTMLTexture(uiElement); // Pass the DOM element
const geometry = new THREE.BoxGeometry(1, 1, 1);
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
PlayCanvas
PlayCanvas supporta anche HTML-in-Canvas utilizzando la relativa API texture:
// Wait for the 'paint' event to set the source
canvas.addEventListener('paint', () => {
htmlTexture.setSource(htmlElement);
}, { once: true });
canvas.requestPaint();
// Keep up to date
canvas.addEventListener('paint', onPaintUpload);
const material = new pc.StandardMaterial();
material.diffuseMap = htmlTexture;
material.update();
Babylon.js
Babylon.js supporta HTML-in-Canvas tramite la classe BABYLON.HtmlTexture:
// 2. Wrap the DOM element in an HtmlTexture
const htmlTexture = new BABYLON.HtmlTexture("htmlTexture", uiElement, scene);
// 3. Assign the texture to a material
const material = new BABYLON.StandardMaterial("hudMaterial", scene);
material.diffuseTexture = htmlTexture;
// 4. Apply material to 3D mesh
const plane = BABYLON.MeshBuilder.CreatePlane("hudPlane", { width: 1.6, height: 0.9 }, scene);
plane.material = material;
// 5. Start Render Loop
engine.runRenderLoop(() => {
scene.render();
});
PixiJS
PixiJS ha rilasciato il supporto per HTML-in-Canvas in v8.19.0:
import { HTMLSource } from 'pixi.js/html-source';
// ... Initialize the app
// Append the HTML element as a direct child of the Pixi canvas
app.canvas.appendChild(htmlElement);
// Create the HTML-in-Canvas source and wrap it in a Sprite
const sprite = Sprite.from(new HTMLSource({ resource: form, autoUpdate: true }));
app.stage.addChild(sprite);
app.ticker.add(() => {
// Make sure to align the HTML element by updating its transform
const syncT = app.canvas.getElementTransform(htmlElement, finalTransform);
if (syncT) {
htmlElement.style.transform = syncT.toString();
}
});
CanvasUI
CanvasUI è una libreria open source di componenti UI che utilizzano HTML-in-Canvas.
Implementa HTML-in-Canvas con un agente di programmazione
Se utilizzi un agente di programmazione, installa Modern Web Guidance, che include le istruzioni di implementazione più recenti per HTML-in-Canvas. Oltre a HTML-in-Canvas, Modern Web Guidance copre altre API dei browser moderni e best practice.
Passaggi successivi
- Comprendere i concetti tecnici fondamentali alla base di HTML-in-Canvas.
- Scopri come eseguire il rendering di HTML in un contesto 2D.
- Scopri come eseguire il rendering del codice HTML in un canvas WebGL.
- Scopri come eseguire il rendering del codice HTML in un canvas WebGPU.
- Scopri di più sulle strategie di riserva.
- Invia una segnalazione su GitHub per condividere il tuo feedback.
- Dai un'occhiata alla raccolta di demo HTML-in-Canvas della community.