Crea una experiencia WebAR dinámica entendiendo exactamente dónde se agrega cada bloque de JavaScript.
Nivel intermedio
Ahora el proyecto crece con datos
En este nivel ya no escribimos una experiencia fija. Vamos a crear una base de catálogo: un mismo target puede mostrar distintos productos usando arrays, objetos, funciones y eventos. Cada paso muestra el archivo completo en ese momento.
HTML base
Crear la escena y la interfaz
Primero dejamos listo el HTML. El botón Siguiente producto existe desde el inicio porque después JavaScript lo va a escuchar.
Dónde va este código: abre index.html y crea o reemplaza el archivo completo con esta versión.
Ahora creamos app.js. No va dentro del HTML: va en el archivo enlazado por la línea 9 de index.html.
Recordatorio sobre querySelector
Cada línea con document.querySelector() conecta JavaScript con un elemento del HTML. El texto entre comillas debe coincidir con el id del elemento: #target busca id="target", #model busca id="model" y así sucesivamente.
Dónde va este código: abre app.js y crea el archivo y pega este contenido desde la línea 1.
Líneas 1 a 5: conectan JavaScript con elementos del HTML.
Líneas 7 a 10: crean un array con dos objetos de producto.
Funciones
Agregar updateProduct al final de app.js
La función usa los datos del producto y actualiza tanto la interfaz como el objeto 3D. Se agrega debajo del array products.
Qué son textContent y addEventListener()
textContent es una propiedad que permite leer o cambiar el texto interno de un elemento HTML. Si tienes <h1 id="titulo">Hola</h1>, entonces titulo.textContent = "Nuevo texto" cambia lo que el usuario ve en pantalla.
addEventListener() sirve para escuchar algo que ocurre. Por ejemplo: un clic, una tecla, la carga de un archivo o la detección de un target en MindAR. La estructura es: elemento.addEventListener("evento", función).
boton.addEventListener("click", ...) escucha clics sobre un botón.
target.addEventListener("targetFound", ...) escucha cuando MindAR reconoce una imagen.
target.addEventListener("targetLost", ...) escucha cuando MindAR pierde la imagen.
Qué es setAttribute()
setAttribute() cambia un atributo de un elemento HTML. En A-Frame es muy importante porque los objetos 3D también se configuran con atributos.
Por ejemplo, box.setAttribute("visible", "true") busca el atributo visible de la caja y lo cambia a true. Eso hace que el objeto aparezca en la escena.
setAttribute("visible", "false") oculta un objeto.
setAttribute("color", "#22c55e") cambia el color.
setAttribute("position", "0 0 0") cambia la posición en X, Y, Z.
Qué es object3D
object3D es la puerta desde A-Frame hacia Three.js. A-Frame te deja escribir una escena con etiquetas HTML, pero por debajo cada entidad tiene un objeto real de Three.js. Ese objeto vive en elemento.object3D.
Cuando usamos box.object3D.scale.set(...), box.object3D.rotation.y o box.object3D.visible, estamos modificando el objeto 3D directamente desde Three.js.
Qué es style
style permite modificar CSS desde JavaScript. Por ejemplo, title.style.color = product.color cambia el color del texto usando un dato guardado en el objeto product.
En proyectos reales conviene usar clases CSS cuando el cambio es grande, pero style es útil para cambios pequeños y directos como color, tamaño o posición.
Dónde va este código: abre app.js y agrega la función después de la línea 10. Aquí ves el archivo completo.
Ahora conectamos el botón y MindAR. Todo se agrega al final del archivo app.js.
Recordatorio sobre addEventListener()
En esta lección escuchamos tres eventos: click para el botón, targetFound para cuando MindAR detecta el marcador y targetLost para cuando lo pierde. La misma idea sirve para botones normales y para eventos de realidad aumentada.
Dónde va este código: abre app.js y pega estos eventos al final. Aquí está el archivo completo final.