Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/manufosela/workshop-make-a-simple-carousel-lit-element-web-component
Simple Carousel with Lit-Element
https://github.com/manufosela/workshop-make-a-simple-carousel-lit-element-web-component
Last synced: 3 days ago
JSON representation
Simple Carousel with Lit-Element
- Host: GitHub
- URL: https://github.com/manufosela/workshop-make-a-simple-carousel-lit-element-web-component
- Owner: manufosela
- License: other
- Created: 2020-10-16T21:27:35.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2023-04-30T09:53:53.000Z (over 1 year ago)
- Last Synced: 2024-11-10T19:23:17.808Z (2 months ago)
- Language: JavaScript
- Size: 1.43 MB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Web-component `simple-carousel`
Ejercicio de como convertir un `carousel de imagenes` hecho con Vanilla Javascript en un web-component refactorizando, añadiendo funcionalidad y caracteristicas y haciendolo accesible e indexable por buscadores.## Paso 0
Lo primero será clonar el repositorio y colocarse en la rama paso1.```
$ git clone https://github.com/manufosela/simple-carousel.git
$ cd simple-carousel
$ git checkout paso0
```Aquí aún no tenemos el `web-component`, si no solamente el carousel en vanilla javascript.
Para probarlo necesitaremos algún servidor de estaticos.
Si tienes instalado Python 2.X en tu equipo, puedes poner:
```
$ python -m SimpleHTTPServer 8081 #python 2$ python -m http.server 8081 #python 3
```
Entonces abre un navegador y pon ```localhost:8081```(En el paso 0 es necesario utilizar un servidor externo porque partimos de un carousel vanilla sin npm configurado)
O también puedes usar la extensión de chrome ["Chrome web server"](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb)
Puedes ver que este código funciona, pero a nivel de semantica de etiquetas y de funciones javscript se podría mejorar, pero es un buen MVP y punto de partida.
## Paso 1
Para ir al paso uno, hacemos checkout de la rama `paso1`
```
$ git checkout paso1
$ npm install
```Aquí ya tenemos un `web-component` con una estructura de directorios y las dependencias necesarias para desarrollar el mismo.
Para usar el mismo código del paso 0, se ha metido todo el contenido del fichero `styles.css` en el fichero `/src/simple-carousel-style.js` para poder importarlo desde el `web-component`
Todo el HTML de la etiqueta `` del fichero `index.html` se ha metido dentro del fichero `/src/SimpleCarousel.js` y dentro del método `render`
Las funciones de `carousel.js` se ha añadido como métodos dentro del componente en el fichero `/src/SimpleCarousel.js`
Ahora si ejecutamos:
```
$ npm run start
```Veremos como arranca un navegador y nos muestra exactamente el mismo carrusel de imagenes a nivel de funcionalidad.
Sin embargo, si desde las `Dev Tools` accedemos a la composición de la página (tab `Elments`), veremos que ahora todo el HTML del carrusel está encapsulado en el `shadow-dom`, quedando innacesible para su indexación.## Paso 2
Para obtener el código del paso 2 hacemos checkout de la rama paso2
```
$ git checkout paso2
```Cambios realizados:
- SimpleCarousel.js
- Añadimos:
- `imageList`, como atributo, para poder pasar en la declaración del componente la lista de imagenes
- `numImages`, como propiedad, para obtener el número de imagenes que se cuentan a partir de `imageList`
- `imagePath`, como propiedad, para guardar la ruta de las imagenes y no tener que ponerla en cada imagen en `imageList`.
- En el método `firstUpdated` obtenemos el array de imagenes que guardamos en la propiedad `images` a partir del atributo `imageList`. Así mismo obtenemos la logitud del array de la propiedad `images` que almacenamos en la propiedad `numImages`
- Creamos el método `_cicleSpan` para renderizar la navegación de las imagenes a partir del número de imagenes (circulitos de abajo) y eliminamos los tag ``
-2.1.- Ejercicio: Convertir la propiedad imagePath en atributo
## Paso 3
Para obtener el código del paso 3 hacemos checkout de la rama paso3
```
$ git checkout paso3
```En este paso los cambios realizados en `SimpleCarousel.js` son:
- Hemos refactorizado los métodos para optimizar el funcionamiento, quitando por ejemplo el método `getCurrentImageIndex` y añadiendo una propiedad `currentIndex`
- Se ha añadido los comentarios necesarios para documentar las propiedades del componente.
- Se ha añadido dos nuevas propiedades, `descriptions` y `description` que contiene la lista de descripciones de las imagenes y la descripción actual visible, respectivamente.
- Para obtener las descripciones se ha creado el método `getDescriptions` que toma de un slot llamado *descriptions* en la declaración del componente.
Dicho método es llamado en el método del ciclo de vida del componente `connectedCallbak` para tener dichos datos antes de cualquier renderizado.En los estilos `simple-carousel-style.js` se ha añadido estilos para las descripciones de las imagenes
3.1- Se te ocurre alguna otra refactorización que mejore o simplifique el código
## Paso 4
Para obtener el código del paso 4 hacemos checkout de la rama paso4
```
$ git checkout paso4
```Tener las imágenes en un atributo, dificultan la inserción de las mismas y quedan ocultas a la indexación para el SEO.
Refactorizamos de manera que las imagenes ahora se declaran al declarar el componente.
Necesitamos cambiar la estructura de datos para guardar imagenes y descripciones en un objeto.
Creamos el método `getCarouselData` para recuperar del DOM la estructura imagen-descripción y almacenarlo en la propiedad `carouselData`, que es un objeto con las propiedades `image` y `description`## Paso 5
Para obtener el código del paso 5 hacemos checkout de la rama paso5
```
$ git checkout paso5
```
En este paso hacemos mas accesible el componente:
- Mejoramos semantica, quitando por ejemplo span por buttons en la navegación de los puntos.
- Añadimos los tabindex
- Hacemos que funcione con teclado mediante enter.## Paso 6
Para obtener el código del paso 6 hacemos checkout de la rama paso6
```
$ git checkout paso6
```En este paso añadimos funcionalidad para que las imagenes se pasen solas y un botón para activar y desactivar dicho autoplay.
## master
En la rama master, ya está el componente terminado y donde se han hecho diferentes refactors y mejoras para garantizar el correcto funcionamiento del componente.
## Author
**manufosela**## License
This project is licensed under the Apache 2.0 License - see the [LICENSE](LICENSE) file for details
## Generated
**generator-lit-element-base** - *yeoman npm package* - by [@manufosela](https://github.com/manufosela/generator-litelement-webcomponent)