43 votes

Motif de formes irrégulières cliquables

J'ai besoin de faire un modèle de de nombreuses formes non rectangulaires . Chaque forme doit être interactive et révéler une image au clic.
La demande est de prendre une image d'un vitrail et de la transformer en une page web remplie de cette image. Chaque panneau doit être cliquable semblables à celles que l'on voit dans les églises, mais au premier chargement, chaque forme est en noir et blanc et, en cliquant, elle révèle la couleur du verre.

J'imagine que cette solution comprendra 2 parties, la version couleur de l'ensemble du vitrail et une version noir et blanc par-dessus. Ensuite, d'une manière ou d'une autre, chaque petit panneau de verre sur le clic doit cacher la partie en noir et blanc en dessous pour révéler l'image en couleur en dessous.

Je n'ai aucune idée de la meilleure solution à adopter et je n'ai rien trouvé d'utile pour m'aider à faire quelque chose de similaire avec des formes et des zones interactives aléatoires . J'ai inséré ci-dessous un exemple du résultat, imaginez que chaque portion de verre est cliquable et que le clic révèle la couleur.

Les lignes blanches indiquent simplement que chaque volet se comporte indépendamment des autres.

Random shaped interactive, clackable areas

21 votes

C'est un travail pour <svg>

3 votes

Quel étrange client vous avez ! Par curiosité, j'aimerais voir le contexte, ou le produit final lorsque vous aurez terminé.

5 votes

Il existe de nombreux exemples de d3 pour les diagrammes de Voronoï cliquables, vous pourriez trouver intéressant de les examiner.

88voto

web-tiki Points 14660

Pour faire un motif de polygones cliquables irréguliers vous pouvez utiliser la fonction inline SVG avec :

Il vous permettra de concevoir n'importe quel forme cliquable et les rendre réactifs.

Voici un exemple de ce que vous pouvez faire avec un état de survol et de focus pour rendre les formes interactives :

svg {
  display:block;
  width:40%; height:auto;
  margin:0 auto;
}
polygon {  
  fill:#ccc;
  stroke:#fff; stroke-width:0.3;
  transition: fill .15s;
}
a:hover .teal { fill:teal; }
a:hover .pink { fill:pink; }
a:focus .teal, 
a:focus .pink { fill:orange; }

<svg viewbox="0 0 20 19">
  <a xlink:href="#"><polygon class="teal" points="0 0 10 5 8 10 0 5" /></a>
  <a xlink:href="#"><polygon class="pink" points="0 0 10 5 15 0" /></a>
  <a xlink:href="#"><polygon class="teal" points="0 5 8 10 0 15" /></a>
  <a xlink:href="#"><polygon class="teal" points="15 0 10 5 20 19" /></a>
  <a xlink:href="#"><polygon class="pink" points="20 19 10 5 8 10" /></a>
  <a xlink:href="#"><polygon class="teal" points="20 19 8 10 0 15 8 13" /></a>
  <a xlink:href="#"><polygon class="pink" points="20 19 0 19 0 15 8 13" /></a>
  <a xlink:href="#"><polygon class="pink" points="15 0 20 19 20 20 20 0" /></a>
  <a xlink:href="#"><polygon class="teal" points="20 17 18 16 16 17 17 20 20 20" /></a>
</svg>

L'élément polygone n'autorise que les polygones. Si vous souhaitez réaliser des formes courbes, vous devrez utiliser l'élément chemin élément avec commandes de courbes .

10 votes

Vous pouvez également accéder directement aux éléments à l'aide de JavaScript et ajouter des récepteurs d'événements, par exemple pour retirer les volets en cas de clic : jsfiddle.net/52rrxnsf/2

0 votes

Oui @ComFreek et vous pouvez les styliser avec CSS ajouter des transitions et bien plus encore...

1 votes

Cela semble être exactement ce dont j'ai besoin, en marquant comme réponse. Merci pour votre aide à tous les deux.

9voto

Luca De Nardi Points 1489

Les cartes de la zone d'image peuvent certainement vous aider.

Jetez un coup d'œil à ce qui est un outil très pratique pour cela !

Exemple

<img src="url/to/your/image.jpg" alt="" usemap="#Map" />
<map name="Map" id="Map">
    <area alt="" title="" href="LINK1" shape="poly" coords="380,163,448,127,515,163,457,205" />
    <area alt="" title="" href="LINK2" shape="poly" coords="140,13,48,1,55,13,47,12" />
</map>

En fait, vous pouvez attribuer des zones différentes, avec des liens différents, à certaines parties de vos images. C'est plus facile de le faire plutôt que de l'expliquer ! :)

2voto

Hitmands Points 1199

C'est un long travail, mais, cela pourrait vous aider : http://imagemap-generator.dariodomi.de/

function helloWorld(area) {
  console.log('You\'ve clicked the right part') 
}

#container { position: relative; }
#info { 
  position: absolute;
  bottom: 90px;
  left: 85px;
  background: yellow;
  display: inline-block;
}

<section id="container">
<img src="https://i.stack.imgur.com/4KmlR.jpg" alt="" usemap="#Map" />
<map name="Map" id="Map">
    <area alt="" title="" href="javascript:helloWorld()" shape="poly" coords="66,282,73,284,79,303,78,320,49,328,48,317" />
    [...]
</map>

<span id="info">&lt;== click here</span>
</section>

0voto

StuntHacks Points 402

On dirait que vous cherchez le <map> - étiquette .

Cependant, cela ne crée que des zones rectangulaires sur lesquelles cliquer. Vous pouvez toutefois utiliser les méthodes onclick de javascript pour vérifier si la souris se trouve dans une certaine zone. De cette façon, vous pouvez également vérifier les zones circulaires, les zones triangulaires ou, en gros, une zone de n'importe quelle forme.

2 votes

Il n'est pas du tout vrai que vous ne pouvez avoir que des zones rectangulaires, vous pouvez créer n'importe quelle forme de polygone !

0 votes

Oh ok, je ne le savais pas. Je l'ai corrigé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X