Càmera, galeria de fotos i mapa
Càmera fotogràfica
La secció 2 de la webapp permet fer fotos amb la càmera del dispositiu. Ha d'incorporar:
- Un botó per fer la foto
- Una imatge per a la vista prèvia de la foto feta
- Un botó per desar la foto
El fragment de la secció queda en la forma:
- fer_foto.html
<div id="seccio_2" class="seccio"> <div id="div_foto"> <!-- contenidor de la vista prèvia de la foto feta --> <img id="foto"> <i id="icona_camera" class="fa-solid fa-image"></i> <!-- icona que ocupa l'espai quan encara no s'ha fet la foto --> </div> <div id="div_control"> <!-- contenidor dels botons per fer i desar la foto --> <label for="obturador"> <!-- etiqueta auxiliar per ocultar el botó predeterminat --> <i class="fa-solid fa-circle-dot"></i> <!-- icona del botó per fer la foto --> </label> <input type="file" accept="image/*" id="obturador" capture="camera" /> <!-- element que captura la imatge --> <i id="desa" class="fa-solid fa-check"></i> <!-- icona del botó per desar la foto --> </div> </div>
<input> incorpora l'atribut capture="camera", és possible que el dispositiu no tingui càmera o que la configuració del navegador o del propi dispositiu no autoritzi el seu ús. En aquests casos s'obre la galeria de fotos del dispositiu i se'n pot triar una.
Per operar sobre la foto realitzada s'ha d'incorporar un element <canvas> auxiliar. També s'ha d'incloure un contenidor per mostrar la foto en pantalla completa:
- canvas.html
<canvas id="canvas"></canvas> <div id="div_gran"> <img id="foto_gran" /> </div>
Aquests són els selectors i les declaracions CSS corresponents:
- fer_foto.css
#div_foto { flex: 1; display: flex; justify-content: center; align-items: center; } #icona_camera { font-size: 40vmin; color: #950E17; } #foto { max-width: 60vmin; /* dimensions màximes per a la prveisualització de les fotos */ max-height: 60vmin; cursor: pointer; } #div_control { height: 25vmax; display: flex; justify-content: space-evenly; align-items: center; } #div_control i { cursor: pointer; font-size: 20vmin; color: green; } #obturador { position: absolute; width: 0; opacity: 0; } #canvas, #desa { display: none; } #div_gran { display: none; flex: 1; justify-content: center; align-items: center; background-color: black; max-height: 100vh; max-height: 100svh; max-height: -webkit-fill-available; } #foto_gran { max-width: 95vmin; max-height: 95vmax; cursor: pointer; } @media (orientation: landscape) { #seccio_2 { flex-direction: row; } #div_foto { flex-direction: column; } #div_control { width: 25vmax; height: auto; flex-direction: column; } #div_gran { max-height: 100vh; max-height: 100svh; } #foto_gran { transform: rotate(-90deg); /* gir de 90 graus correponent al canvi d'orientació */ } }
Aquest és l'aspecte que s'obté en les dues orientacions:
Galeria de fotos
La secció 3 de la webapp és per a les fotos realitzades:
- galeria.html
<div id="seccio_3" class="seccio"> <div id="llista_titol"> <!-- capçalera de la llista de fotos --> <i class="fa-solid fa-image"></i> <!-- per a la miniatura de les fotos --> <i class="fa-solid fa-calendar-days"></i> <!-- per a la data de captura de les fotos --> <i class="fa-solid fa-trash"></i> <!-- per esborrar les fotos --> </div> <div id="llista_fotos"> <!-- contenidor, inicialment buit, on hi haurà una fila per a cada foto --> </div> </div>
Aquests són els selectors i les declaracions CSS corresponents:
- galeria.css
#llista_titol { display: flex; justify-content: center; align-items: center; text-align: center; } #llista_titol i { font-size: 4vmax; color:#950E17; } #llista_titol i:nth-child(1) { /* primer <i> (miniatura de la foto) */ flex: 2; } #llista_titol i:nth-child(2) { /* segon <i> (data i hora) */ flex: 3; } #llista_titol i:nth-child(3) { /* tercer <i> (icona per esborrar la foto) */ flex: 1; } #llista_fotos { height: 70vmax; overflow-y: scroll; } #llista_fotos::-webkit-scrollbar { display: none; /* oculta la barra de desplaçament vertical */ } @media (orientation: landscape) { #llista_fotos { height: 70vmin; } }
Aquest és l'aspecte que s'obté en les dues orientacions:
Mapa
La secció 4 de la webapp mostra un mapa. La llibreria Javascript més utilitzada per mostrar mapes és Leaflet, s'ha de referenciar en la capçalera <head> del document index.html:
- mapa.html
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css"> <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
El mapa ocuparà tot l'espai de la secció 4, s'ha d'eliminar el text que conté:
<div id="seccio_4" class="seccio"> Secció 4 <!-- s'ha d'eliminar el text "Secció 4" --> </div>








