Maison > interface Web > js tutoriel > Création d'une galerie d'images avec l'API Flickr

Création d'une galerie d'images avec l'API Flickr

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2025-02-20 09:45:14
original
736 Les gens l'ont consulté

Creating an Image Gallery with the Flickr API

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:

  • Style CSS: Nous affinerons l'apparence de la galerie, garantissant que les images s'adaptent à leurs conteneurs et les flèches fournissent des commentaires visuels clairs sur le plan de volonté et de se concentrer pour une amélioration de l'accessibilité.
  • Logique JavaScript: La fonctionnalité de base sera implémentée en utilisant des expressions de fonction immédiatement invoquées (IIFES) pour le code propre et le mode strict pour la prévention des erreurs.
  • Intégration de l'API Flickr: Récupérer et afficher efficacement des images à l'aide d'un module d'utilité pour gérer les URL et l'extension d'objet pour la modularité.
  • Délégation d'événements: Optimisation de l'interaction utilisateur et de la gestion de la mémoire via la délégation des événements en JavaScript, ainsi que la prise en charge de la navigation par clavier.

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:

  • une hauteur fixe (500px) pour le conteneur .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.
  • Hover et Focus Styles pour les flèches de navigation (.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%;
}
Copier après la connexion
Copier après la connexion

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

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%;
}
Copier après la connexion
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal