SpaceX API ๐Ÿ‹์—์„œ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” Vista

8175 ๋‹จ์–ด cssjavascripthtmlspacex


Literal Strings(ES6) ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ๋ Œ๋”๋ง ์ž‘์—…์ด ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
Shadow Dom์„ ์กฐ์ž‘ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์‚ฌ์šฉ์ž ์ •์˜ ์š”์†Œ๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ Javascript๋ฅผ ์ง์ ‘ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  HTML ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๋‚ด๋ถ€ HTML์„ ํฌํ•จํ•˜๋Š” ์ฝ˜ํ…์ธ ์— ์ฐธ์—ฌํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

  • El famoso innerHTML:

  •         contenedorCardsData.innerHTML += `
                                <div class="contenedorCardsItems">
                                    <h4>${element.serial}</h4>
                                    <div class="contenedorStatus">
                                        <span class="blue">${element.type}</span>
                                        <span class="yellow">${element.status}</span>
                                    </div>
    
                                    <div class="contenedorTextos">
                                        <p class="descripcion">${element.last_update}</p>
                                        <p class="fechaLanzamiento">Fecha de Lanzamiento</p>
                                        <p class="fechaLanzamientoContent">${element.original_launch}</p>
                                    </div>
                                </div>
                                `;
        } else {
    
            // Pasar cรณdigo para mostrar advertencia de que no existen resultados
    
        }
    }
    



    Siendo este un desarrollo que me tomรณ mas o menos 15 min crearlo, tiene muchas cosas que mejorar por lo que puedes agrear tus propias mejoras, puedes agregar filtros, de hecho el botรณn del filtro esta listado en la UI solo debes agregarle funcionalidad y practicar ya que el cรณdigo para pasar peticiones fetch lo tienes acรก:


    async function busqueda() {
        var categorie = document.querySelector('#categoria').value;
        var spacexApi = await fetch(`https://api.spacexdata.com/v4/${categorie}`);
        return spacexApi;
    }
    


    Tres lineas de cรณdigo que te permiten obtener la respuesta y poder manejarla como promesa para poder hacer con ella lo que quieras.

    Veamos como se ve el diseรฑo ์ตœ์ข… ๐Ÿ‹





    ๋กœ๋“œ ์š”์†Œ๋Š” ์•„๋งˆ๋ฆด๋กœ์ฆˆ ํ‹ฐ์—”์ด ์•„๋‹Œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋กœ๋“œํ•  ๋•Œ, ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.

    ๐Ÿ‹ Solo se basa en un par de parametros que pasas a travรฉs de Fetch



    Como siempre, trato de dejar el cรณdigo de la forma mas entendible posible para que puedas reutilizar los estilos en cualquiera de tus frameworks favoritos, finalmente cuando envias la peticiรณn a travรฉs de fetch puedes manejar directamente esa respuesta, gracias a que el endpoint de SpaceX API te genera el resultado en base al query que estas haciendo y sin usar nรญ una sola clase.



    ยฟConocimiento Importantes Para el Desarrollo?


  • ๊ฐ€์ ธ์˜ค๊ธฐ API

  • :root {
        --main-bg-color: #0E0E0E;
        --secondary-bg-color: #161616;
        --blue-color: #4E54FF;
        --yellow-color: #F4E236;
        --bg-cards: rgba(255, 255, 255, 0.103);
    }
    }
    


  • CSS (๊ทธ๋ฆฌ๋“œ/ํ”Œ๋ ‰์Šค/ํ‚คํ”„๋ ˆ์ž„)

  • header {
        height: 200px;
        width: 100%;
        display: grid;
        grid-template-columns: 20% 30% 20% 15% 15%;
        grid-template-rows: 100px;
    }
    
    


  • CSS/Animaciรณn previa a la bรบsqueda

  • .loading::before {
        content: "";
        width: 40px;
        height: 100%;
        background: linear-gradient(96.4deg, rgba(255, 255, 255, 0) 4.54%, rgba(255, 255, 255, 0.265283) 57.15%, rgba(255, 255, 255, 0) 94.26%);
        position: absolute;
        opacity: .4;
        animation: move 1s infinite;
    }
    
    //el keyframe
    @keyframes move {
        0% {
            transform: translateX(0px) rotate(0deg);
        }
        50% {
            transform: translateX(200px) rotate(20deg);
        }
        100% {
            transform: translateX(0px) rotate(0deg);
        }
    }
    
    


  • CSS/๋ชฉ๋ก ๋ชฉ๋ก ์ž‘์„ฑ

  • .listaSeleccion {
        display: flex;
        justify-content: center;
        align-items: center;
    }
    
    .listaSeleccion select {
        display: flex;
        justify-content: center;
        align-items: center;
        width: 100px;
        background-color: transparent;
        border: none;
        outline: none;
        font-family: Montserrat;
        font-weight: 500;
        color: var(--main-yellow);
    }
    
    .listaSeleccion select * {
        background-color: var(--main-blue);
        border: none;
        box-shadow: none;
    }
    
    .listaSeleccion select>option {
        background-color: var(--main-blue);
        border: none;
        box-shadow: none;
        color: var(--main-yellow);
    }
    
    
    


  • Javascript/Manejador de eventos principal

  • 
    search.addEventListener('click', function(e) {
        let select = categorie.value;
        let string = txtSearch.value;
        busqueda()
            .then(data => { return data.json() })
            .then(res => {
                // console.log(res);
                contenedorCardsData.innerHTML = "";
                if (select == "capsules") {
                    res.forEach(element => {
                        busquedaCapsules(element, string);
                    })
                } else if (select == "history") {
                    res.forEach(element => {
                        buscarHistory(element, string);
                    })
                }
    
            });
    
    
    });
    
    


  • CSS/Microinteraction para el filtro

  • 
    .contenedorFilter span {
        width: 25px;
        height: 2px;
        margin: 3px;
        background-color: var(--main-blue);
        transition: .4s;
        cursor: pointer;
    }
    
    .contenedorFilter:hover span {
        width: 35px;
    }
    
    .contenedorFilter:hover span:nth-child(2) {
        width: 10px;
    }
    
    .contenedorFilter span:nth-child(2) {
        width: 15px;
        height: 2px;
        margin: 3px;
        background-color: var(--main-yellow);
    }
    
    .contenedorFilter span:nth-child(3) {
        width: 10px;
        height: 2px;
        margin: 3px;
        background-color: var(--main-yellow);
    }
    
    .contenedorFilter:hover span:nth-child(3) {
        width: 5px;
    }
    
    


    Sรญ no conoces CSS, JS te costarรก mil veces .



    Este cรณdigo no ha sido testeado, por lo tanto lo puedes mejorar mil veces mas



    Parte Importante de tu aprendizaje en web design, es la utilizaciรณn de APIs y manejo del DOM con un enfoque en desarrollo web 2021, evita esmerarte en que tu aplicaciรณn sea compatible con IE, ya tiene una muerte anunciada asรญ que mejorar preparate para adentrarte en del desarrollo mordenos, APIS, Frameworks, Javascript Moderno...

    Es el encarga de cambiar la propiedad de display none a block y ๊ทธ ๋ฐ˜๋Œ€, puedes animar la transiciรณn del elemento contenedor como prรกctica o simplemente dejarlo como estรก actualmente.

    Este es mi correo profesional [email protected] , si me escribes te aseguro que tendrรกs una respuesta.

    ์„ค๋ช…,


    ํ˜ธ์„ธ A. ์•„๋งˆ์•ผ

    Link al repo

    Link a la demo

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ