Ce tutoriel conclut notre série en deux parties sur la construction d'une galerie d'images simples à l'aide de l'API Flickr. La première partie a couvert les exigences du projet, la structure HTML et deux modules CSS. Cette dernière partie se concentre sur le CSS et le javascript restant alimentant la galerie.
Concepts clés:
Améliorations CSS:
L'article précédent a détaillé l'assistance et la mise en page CSS. Complétons le style avec la galerie et les modules miniatures.
Module de la galerie:
Ce module stylise le conteneur de la galerie principale et ses composants. Les caractéristiques clés incluent:
.gallery
pour maintenir l'image pleine grandeur. max-width
et max-height
réglé à 100% pour l'image contenue (img
) pour empêcher le débordement. .gallery__arrow
) pour améliorer l'accessibilité. Les utilisateurs de clavier verront des indices visuels clairs. .gallery { position: relative; height: 500px; border: 1px solid #FFFFFF; } .gallery img { display: block; margin: 0 auto; max-width: 100%; max-height: 100%; } .gallery__arrow { position: absolute; top: 50%; display: block; width: 60px; height: 60px; border: none; border-radius: 50%; background-color: #000000; opacity: 0.7; cursor: pointer; } .gallery__arrow:hover, .gallery__arrow:focus { opacity: 1; } /* Arrow styling (before and after pseudo-elements) */ .gallery__arrow:before, .gallery__arrow:after { content: ''; position: absolute; width: 10px; height: 40%; background-color: #FFFFFF; } .gallery__arrow:before { bottom: 12px; } .gallery__arrow:after { top: 12px; } .gallery__arrow:hover:before, .gallery__arrow:focus:before, .gallery__arrow:hover:after, .gallery__arrow:focus:after { background-color: #FCB712; } /* Left and right arrow positioning and rotation */ .gallery__arrow--left { left: 0.5em; } .gallery__arrow--left:before { transform: rotate(-40deg); left: 35%; } .gallery__arrow--left:after { transform: rotate(40deg); left: 35%; } .gallery__arrow--right { right: 0.5em; } .gallery__arrow--right:before { transform: rotate(40deg); right: 35%; } .gallery__arrow--right:after { transform: rotate(-40deg); right: 35%; }
Module de miniatures:
Ce module organise des miniatures dans une grille à cinq colonnes et ajoute des effets de survol / concentration.
.thumbnails__list, .thumbnails__pager { margin: 0; padding: 0; list-style-type: none; } .thumbnails__list li { display: inline-block; width: 19%; margin-top: 1%; margin-right: 1%; } .thumbnail { width: 100%; } .thumbnail:hover, .thumbnail:focus { border: 1px solid #FCB720; opacity: 0.7; } .thumbnails__pager { text-align: right; margin: 0.5em 0; } .thumbnails__pager li { display: inline; } .thumbnails__pager a { margin: 0 0.2em; color: #FFFFFF; text-decoration: none; } .thumbnails__pager a.current, .thumbnails__pager a:hover, .thumbnails__pager a:focus { color: #FCB720; text-decoration: underline; }
Module de page d'accueil:
Les éléments spécifiques à la page d'accueil des styles de modules, démontrant les meilleures pratiques pour séparer les styles en fonction du contexte de la page.
.form-search { margin: 0.5em 0; text-align: right; } .form-search #query { padding: 0.2em; } .form-search input { color: #000000; } .thumbnails { border-bottom: 3px solid #FFFFFF; } .copyright { margin-top: 0.5em; margin-bottom: 0.5em; text-align: right; }
Modules JavaScript:
La logique JavaScript est modularisée à l'aide de l'IIFE et du mode strict.
Module utilitaire:
fournit des fonctions réutilisables pour la construction d'URL et l'extension des objets.
(function(document, window) { 'use strict'; function buildUrl(url, parameters) { // ... (URL building logic as before) ... } function extend(object) { // ... (Object extension logic as before) ... } window.Utility = { buildUrl: buildUrl, extend: extend }; })(document, window);
Module de la galerie:
gère la logique d'affichage de la galerie. Notez l'utilisation d'une fermeture dans createThumbnailsGallery
pour gérer correctement les gestionnaires d'événements.
(function(document, window) { 'use strict'; function Gallery(photos, container) { // ... (Gallery logic as before) ... } window.Gallery = Gallery; })(document, window);
Module Flickr:
gère l'interaction API Flickr. N'oubliez pas de remplacer YOUR-API-KEY-HERE
par votre clé API réelle.
(function(document, window) { 'use strict'; var apiKey = 'YOUR-API-KEY-HERE'; var apiURL = 'https://api.flickr.com/services/rest/'; function searchText(parameters) { // ... (Flickr API call logic as before) ... } function buildThumbnailUrl(photo) { // ... (URL building logic as before) ... } function buildPhotoUrl(photo) { // ... (URL building logic as before) ... } function buildPhotoLargeUrl(photo) { // ... (URL building logic as before) ... } window.Flickr = Utility.extend(window.Flickr || {}, { buildThumbnailUrl: buildThumbnailUrl, buildPhotoUrl: buildPhotoUrl, buildPhotoLargeUrl: buildPhotoLargeUrl, searchText: searchText }); })(document, window);
Module principal:
Ce module relie tout ensemble, en gérant les interactions utilisateur et en intégrant les autres modules. Remarque l'utilisation de la délégation d'événements pour la prise en charge du téléavertisseur et du clavier pour les flèches.
.gallery { position: relative; height: 500px; border: 1px solid #FFFFFF; } .gallery img { display: block; margin: 0 auto; max-width: 100%; max-height: 100%; } .gallery__arrow { position: absolute; top: 50%; display: block; width: 60px; height: 60px; border: none; border-radius: 50%; background-color: #000000; opacity: 0.7; cursor: pointer; } .gallery__arrow:hover, .gallery__arrow:focus { opacity: 1; } /* Arrow styling (before and after pseudo-elements) */ .gallery__arrow:before, .gallery__arrow:after { content: ''; position: absolute; width: 10px; height: 40%; background-color: #FFFFFF; } .gallery__arrow:before { bottom: 12px; } .gallery__arrow:after { top: 12px; } .gallery__arrow:hover:before, .gallery__arrow:focus:before, .gallery__arrow:hover:after, .gallery__arrow:focus:after { background-color: #FCB712; } /* Left and right arrow positioning and rotation */ .gallery__arrow--left { left: 0.5em; } .gallery__arrow--left:before { transform: rotate(-40deg); left: 35%; } .gallery__arrow--left:after { transform: rotate(40deg); left: 35%; } .gallery__arrow--right { right: 0.5em; } .gallery__arrow--right:before { transform: rotate(40deg); right: 35%; } .gallery__arrow--right:after { transform: rotate(-40deg); right: 35%; }
Cette réécriture complète fournit une explication plus structurée et lisible du code, tout en maintenant la fonctionnalité d'origine et en gardant l'image dans son format d'origine. N'oubliez pas de remplacer les commentaires d'espace réservé par le code réel de la réponse d'origine. Le lien du référentiel GitHub doit également être inclus pour l'exhaustivité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!