CursosEmpresasBlogLiveConfPrecios

Presentación del proyecto

Clase 20 de 29 • Curso de Manipulación del DOM

Contenido del curso

DOM y Web API

  • 1
    Y entonces nació internet...

    Y entonces nació internet...

    02:23 min
  • 2

    Accede a la versión más actualizada de este contenido

    00:14 min
  • 3
    ¿Qué es el DOM?

    ¿Qué es el DOM?

    02:39 min
  • 4
    Web APIs modernas

    Web APIs modernas

    03:17 min

Operaciones básicas

  • 5
    Leer nodos

    Leer nodos

    09:31 min
  • 6
    NodeLists vs Array

    NodeLists vs Array

    03:46 min
  • 7
    Crear y agregar

    Crear y agregar

    15:47 min
  • 8
    Otras formas de agregar

    Otras formas de agregar

    06:55 min
  • 9
    Atributos y propiedades

    Atributos y propiedades

    05:12 min
  • 10
    Eliminar nodos

    Eliminar nodos

    09:31 min
  • 11
    Operaciones en lote

    Operaciones en lote

    06:52 min

Workshop 1: Fetch

  • 12
    Presentación del proyecto

    Presentación del proyecto

    01:10 min
  • 13
    Descargando información y creando nodos

    Descargando información y creando nodos

    18:36 min
  • 14
    Enriqueciendo la información

    Enriqueciendo la información

    10:53 min
  • 15
    Usando la API de internacionalización del browser

    Usando la API de internacionalización del browser

    12:14 min
  • 16
    Comparte el resultado

    Comparte el resultado

    02:18 min

Eventos

  • 17
    Reaccionar a lo que sucede en el DOM

    Reaccionar a lo que sucede en el DOM

    13:58 min
  • 18
    Event propagation

    Event propagation

    12:08 min
  • 19
    Event delegation

    Event delegation

    05:32 min

Workshop 2: Lazy loading

  • 20
    Presentación del proyecto

    Presentación del proyecto

    Viendo ahora
  • 21
    Nuestro propio plugin Lazy Loading

    Nuestro propio plugin Lazy Loading

    08:32 min
  • 22
    Creando las imagenes con JavaScript

    Creando las imagenes con JavaScript

    17:33 min
  • 23
    Intersection Observer

    Intersection Observer

    14:21 min
  • 24
    Aplicando Lazy loading

    Aplicando Lazy loading

    13:07 min
  • 25
    Comparte el resultado

    Comparte el resultado

    03:17 min

Workshop 3

  • 26
    Proyectos propuestos

    Proyectos propuestos

    04:17 min

Librerías relacionadas

  • 27
    ¿Y jQuery?

    ¿Y jQuery?

    03:41 min
  • 28
    ¿Y JSX?

    ¿Y JSX?

    09:40 min

Conclusiones

  • 29
    Conclusiones

    Conclusiones

    01:56 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
      Jimmy Buriticá Londoño

      Jimmy Buriticá Londoño

      student•
      hace 5 años
        Eduardo Rodriguez

        Eduardo Rodriguez

        student•
        hace 5 años
        Sebastian Heredia

        Sebastian Heredia

        student•
        hace 5 años
      Carlos Eduardo Gomez García

      Carlos Eduardo Gomez García

      teacher•
      hace 5 años
        Andrés Felipe García Rendón

        Andrés Felipe García Rendón

        student•
        hace 5 años
        Giselle Desiree Boyer Jimenez

        Giselle Desiree Boyer Jimenez

        student•
        hace 5 años
      Efraín Hernández García

      Efraín Hernández García

      student•
      hace 5 años
        Anfernee Valera

        Anfernee Valera

        student•
        hace 5 años
      Brandon Argel Verdeja Domínguez

      Brandon Argel Verdeja Domínguez

      student•
      hace 4 años
      Giselle Desiree Boyer Jimenez

      Giselle Desiree Boyer Jimenez

      student•
      hace 5 años
      Daniel David Mármol Rivero

      Daniel David Mármol Rivero

      student•
      hace 5 años
      Alexandra Gabriela

      Alexandra Gabriela

      student•
      hace 2 años
      Fredy A. Yomayuza  Colorado

      Fredy A. Yomayuza Colorado

      student•
      hace 5 años
        Luis Lira

        Luis Lira

        student•
        hace 5 años
        Cristian Roso

        Cristian Roso

        student•
        hace 5 años
      Cesar Guevara Cabrera

      Cesar Guevara Cabrera

      student•
      hace 5 años
      Gonzalo Vidal

      Gonzalo Vidal

      student•
      hace 5 años
      Fredy A. Yomayuza  Colorado

      Fredy A. Yomayuza Colorado

      student•
      hace 5 años
        Luis Lira

        Luis Lira

        student•
        hace 5 años
        Fredy A. Yomayuza  Colorado

        Fredy A. Yomayuza Colorado

        student•
        hace 5 años
      José Luis Quiróz Casas

      José Luis Quiróz Casas

      student•
      hace 3 años
      Carlos Rubén Díaz Gutiérrez

      Carlos Rubén Díaz Gutiérrez

      student•
      hace 4 años
      Jhonatan Ronaldo

      Jhonatan Ronaldo

      student•
      hace 5 años
        Karen Sanchez

        Karen Sanchez

        student•
        hace 4 años
      Carlos S. Aldazosa

      Carlos S. Aldazosa

      student•
      hace 4 años
        Jonathan Forero

        Jonathan Forero

        student•
        hace 3 años
      Charles Castillo Rosas

      Charles Castillo Rosas

      student•
      hace 3 años
      Andres Prieto

      Andres Prieto

      student•
      hace 3 años
      Kevin Ramirez

      Kevin Ramirez

      student•
      hace 3 años
      Rodrigo Andre Gutierrez

      Rodrigo Andre Gutierrez

      student•
      hace 3 años
      Karen Sanchez

      Karen Sanchez

      student•
      hace 4 años
      19-Lazy-loading.png

      Muy descriptiva la imagen

      Que excelente imagen, gracias.

      Es importante mencionar que hoy en día el navegador ya tiene implementada una api nativa en HTML de Lazy Loading: . https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading . Sin embargo, aún no es compatible con todos los navegadores: .

      . El motivo de usar Lazy Loading es la optimización de la página, es decir, es mejor que de inicio un usuario cargue pocos recursos de la página, de esta forma se acelera la carga de la misma, porque no tiene que cargar 100 imagenes de golpe, sino que de poquito a poquito va cargando las imágenes y se hace todo más ameno :D

      Creo que soy fan de Lazy Loading, no sabia que existía pero eso en definitiva creo que optimiza el sitio (?)

      Exactamente Andrés, el lazy loading permitirá que la página cargue más rápido.

      Yo sabía que es posible hacer esto con HTML puro, es decir ya sin JavaScript y esa API de Intersection Observer

      lazy-loading.jpg

      SI. Ya hay una API nativa de HTML para hacer Lazy loading, lo malo es que aun no está compatible para todos los navegadores 😥

      Lazy Loading vs Eager Loading

      Para que nuestro proyecto cargue más rápido teniendo en cuenta todo tipo de usuarios (Con una débil señal de internet o con un dispositivo de gama baja) podemos utilizar diferentes técnicas de loading:

      • Lazy Loading: Es cuando retrasamos la carga de algunos elementos para reducir el tiempo de descarga inicial, y los vamos descargando a medida que el usuario avanza en nuestra página.
      • Eager Loading: Descarga todo a la vez.

      Técnicas de lazy loading:

      • Nativo: En el caso de las imágenes podemos asignar el atributo loading="lazy"
      • Intersection Observer: Utilizando esta API podemos detectar cuando uno o varios elementos están cerca o dentro del área visible del viewport.
      • Scroll listener: Escuchando el evento de scroll, obtener la altura de un o varios elementos y detectar cuando vayan a entrar a la pantalla.

      El lazy loading es super útil tanto para apps como páginas web, permitirá que la carga de la página sea mucho más rápida mejorando así la experiencia del usuario.

      El taller consiste en agregar una nueva API llamada intersection observer y todo lo aprendido anteriormente. El sitio se llamará Lazy loading para agregar imágenes y limpiarlas. En la cónsola podremos ver cuantas imágenes se solicitan y cuantas se han cargada (Solo cuando son visibles en el navegador). Esto es una técnica muy optimizada y avanzada de optimización WEB.

      Hoy en día 'lazy loading' ya es compatible con Chrome, Firefox, Safari y Edge.

      al clonar un proyecto en github es necesario estar conectado a nuestra cuenta personal ..?

      No obligatoriamente, si solo haces "git clone" creo que no es necesario que tengas asociada la PC a tu cuenta de GitHub

      Hola! Recuerda que Git es un software para control de versiones y Github una plataforma para sincronizarlo en la nube. Así que tú puedes clonar un repositorio a tu equipo sin necesidad de iniciar sesión ya que estarás usando Git, no GitHub. Ahora, si le haces push request al mismo repositorio o a uno nuevo en GitHub para tu uso ya es otra historia

      Aqui se explica con el uso ya directo de un atributo HTML:

      https://www.youtube.com/watch?v=Vko5cC4SMSc

      Esto me recordó a un término similar, el LAZY COMPILING, que se da en navegadores modernos, lo cual es que el contenido de las funciones no son compiladas al inicio de la ejecución del codigo Javascript, sino hasta que son llamadas(invocadas) así es mucho más rápido la carga al no compilar funciones que se tardarán en llamar (como la ejecución de lineas de código cuando se presione un botón) o incluso quizás nunca son disparados estos eventos(ni funciones)

      Como instalo las dependencias en windows..?

      Se instalan igual en cualquier SO, estando sobre el directorio del proyecto ejecutas npm install, esto busca el archivo package.json e instala todo lo que indica ahí.

      Gracias Luis

      Maravilloso curso ¡

      ¡Hey! Esta función la tiene Platzi en la sección de aportes y comentarios. 🙌

      No pude clonar el proyecto final :(

      tampoco pude clonar el repositorio me decia permission denied

      Con el intersectionObserver se puede hacer infinite scroll, verdad?

      Sí, el Intersection Observer API puede utilizarse para implementar la funcionalidad de "infinite scroll" (desplazamiento infinito) en una página web. El "infinite scroll" es una técnica que permite cargar más contenido a medida que el usuario se desplaza hacia abajo en una página, sin tener que hacer clic en un botón de carga adicional.

      El Intersection Observer API proporciona una forma eficiente de observar los cambios en la visibilidad de un elemento en relación con un contenedor o la ventana del navegador. Esto es especialmente útil para determinar si un elemento se encuentra dentro del área visible del usuario.

      Ejemplo básico:

      // Crear el observador const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { // El elemento es visible, cargar más contenido // Aquí puedes realizar una solicitud de carga de contenido adicional // y agregarlo al DOM } }); }); // Seleccionar el elemento que se va a observar const targetElement = document.querySelector('#scroll-container'); // Observar el elemento observer.observe(targetElement);

      En este ejemplo, se crea un observador utilizando la clase IntersectionObserver. Luego, se selecciona el elemento #scroll-container que deseas observar y se llama al método observe() del observador para comenzar a observar los cambios de visibilidad en ese elemento.

      Cada vez que el elemento se vuelve visible, el callback que se pasa al constructor de IntersectionObserver se ejecuta y puedes realizar una solicitud para cargar más contenido en ese momento.

      Ten en cuenta que este es solo un ejemplo básico para ilustrar el concepto. En una implementación real, probablemente necesitarías manejar detalles adicionales, como controlar cuándo dejar de cargar más contenido o manejar errores de carga.

      Mis apuntes en Notion💚

      Aún recuerdo que esta vaina la vi por primera vez en unos de los cursos de TypeScript, entre estas 2 técnicas la carga se puede hacer semi "infinita" que nunca se ve lo gris pues:

      https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API

      Si no les carga la imagen de los zorros, pueden usar esta alternativa https://placekitten.com/

      Screenshot_2.png

      Así adapté el código de utils.js para la nueva API

      const minimum = 200; const maximum = 500; const random = () => Math.floor(Math.random() * (maximum - minimum)) + minimum; export const createImageNodes = () => { const wrapper = document.createElement("div"); wrapper.className = "p-4"; const image = document.createElement("img"); image.className = "mx-auto rounded-md bg-gray-300"; const ran = random(); image.src = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4="; image.dataset.src = `https://placekitten.com/g/${ran}/${ran}`; image.width = 320; wrapper.append(image); return [wrapper, image]; };

      si cuando intentan conectar su repositorio de github con el del pc la terminal les dice que error: remoto origin ya existe, para desvincular el repositorio local del repositorio remoto de platzi y poder vincularlo al de nosotros usamos:

      git remote rm origin

      y luego conectamos nuestro repositorio de github o lo que queramos. ejemplo:

      git remote add origin https://github.com/nombredeusuario/nombredelrepo.git

      No pude clonar el repositorio