|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
Imaginez une carte de France des départements.
Le but: changer la couleur du département survolé. Ne pouvant influer sur le couleur de background d'un area de map, il faut jouer avec la transparence. Les bases: un div avec en image de fond la carte principale initiale. dans l'exemple: bg.png dans ce div une image entièrement transparente de même dimensions qui supportera le map. dans l'exemple 0.png le map avec les polygones pour chaque zone puis une image de même dimension pour chaque area avec juste la zone colorisée et le reste transparent dans l'exemple 2.png, 3.png et 4.png Le principe: Lors du survol d'un area, on modifie le src de l'image transparente pour lui appliquer le src de la zone colorée correspondante. Sur le onmouseout on retablit le src de l'image transparente. Code :
Les limites de ce système résident dans la taille et le nombre des images nécessaires. Prévoir un preload des images. Page de démo _
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
||
|
|
40
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 653 ![]() |
Je n'utilise pas beaucoup les <map>, mais le principe que tu présentes est élégant et efficace ^^
merci SF
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : septembre 2010 Messages : 1 ![]() |
Bonjour,
Tout d'abord merci beaucoup pour le partage de ce code, très clair, très simple et très efficace ! J'ai longtemps cherché un moyen "propre" d'afficher un hover au survol d'un area et n'avais jamais trouvé de solution aussi satisfaisante. J'ai cependant un souci pour l'adapter à ce que je veux en faire... Petit résumé. Je souhaite faire une carte "dynamique" pour un jeu de rôle. Le monde est divisé en zone (55 pour être précis, mais le nombre importe peu) qui peuvent être détenues par 4 "factions" différentes et je voudrais faire la chose suivante : j'aimerais que l'ensemble des images à superposer se chargent automatiquement au chargement de la page et non pas au survol de chacun des <area>. Un genre de carte de situation stratégique, si vous me suivez... J'ai réussi à le faire en déplaçant la fonction swapPic dans mon <body> avec la fonction onload="", mais je ne sais pas comment procéder pour que le script m'affiche en superposition TOUTES les images en même temps, pas une seule... A terme, les zones à afficher seront gérée en php/mysql pour pouvoir rapidement modifier et afficher la couleur d'une zone en fonction de la faction à laquelle elle appartient. Pour le moment, j'en suis là : Code :
D'avance merci ! |
||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
si tu regardes les sources de la page demo, les images sont preloadées ...
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
|
|
00
|
|
|
#5 | ||||
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
En complément de ce script je joins un petit javascript qui permet de convertir les coordonnées au format svg que l'on peut recupérer avec gimp en coords html pour areras:
Dans gimp: on selectionne une zone avec l'outil selection contigüe (baguette magique) puis dans le menu selection > "vers chemin" On affiche alors la fenetre des chemins: fenêtre > fenêtres ancrables > chemins Puis click droit sur le chemin créé et choisir exporter donner un nom au fichier et enregistrer. on obtient un svg comme ceci Code :
Code :
cliquer sur le bouton On pourrait imaginer également renseigner le textarea directement à partir du fichier avec un ajax (ou le contenu d'un balise object) ... LIMITATIONS: Dans cette version il n'est prévu d'exporter qu'une zone à la fois. Les zone ne doivent pas contenir de "trous" La précision des zones est de l'ordre du Math.floor, puisque les coordonnées sont tronquées de leur décimales. On peut envisager un split et un round ...
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
||||
|
|
00
|
|
|
#6 | ||
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
Version avec arrondis (Math.round) sur les coordonnées:
Code :
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
||
|
|
00
|
|
|
#7 | ||||
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
Allez hop un peu plus encore !
Imaginez que vous ayez besoin de mapper tous les departements français. La methode précedente vous permet de le faire pour un departement à chaque fois (une zone contigue selectionée avec gimp). Que diriez vous de selectionner tous les departement en une fois, c'et a dire avoir plusieurs zones en une fois. voici ce que retourne une exportation de chemin sous gimp avec 5 zones en même temps : Code :
Code :
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
||||
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
J'ai ajouté l'importation du fichier !
Code :
Les fichiers doivent etre dans repertoire nommé SVGFiles au niveau du fichier html Voilà ! il ne manque plus qu'un peu de rationalisation, mais je ne pense pas aller plus loin ...
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
||
|
|
00
|
|
|
#9 | ||||
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
petite demo du résultat obtenu:
Code :
Code :
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
||||
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() Diem VOVivre Inscription : avril 2006 Messages : 2 772 ![]() |
salut RomainVALERI, kpuche et SpaceFrog,
j'ai regardé avec intérêt ta méthodologie pour obtenir un map. très intéressant. ![]() bon maintenant passons aux critiques: ^^ outre la p'tite erreur sur zone1 qui est violet et pas jaune, j'ai remarqué qq "points" qui me chagrinent. après recherche sur le sujet voici mon avis: tu convertis l'ensemble des coordonnées en point de polygone, or il s'agit pour la plupart, de points de contrôles: les points ne sont pas forcement à proximité de la courbe. tu limites et restreint un peu trop sur une seul définition de courbe, ce qui bloque rapidement l'algo de conversion. de plus cela ne gère pas une forme simple: le polygone. je dis cela parce qu'il serait plus sur d'avoir une meilleur approximation de l'area à partir d'une forme polygonale. cela ne traite pas le transform, simplication, defs et beaucoup d'autres définitions du format svg... bon on peut pas te tenir rigueur : le format est assez complexe. cela dit je pense que le choix de prendre les courbes ne me parait pas judicieux. puisqu'il s'agit de svg soit de l'xlm j'ai regardé du côté xslt pour l'obtention d'un map et j'ai été surpris de ne pas trouver de feuille de style. d'ailleurs il est intéressant de faire remarquer qu'il est possible de faire aussi cette exemple directement avec le format svg. voici donc une autre proposition à base du svg: soit définir des chemins à partir de gimp soit vectoriser l'image sous inkscape ensuite dans inkscape: convertir l'ensemble des courbes en polygones : Extensions/Modification de chemin/Aplatir les courbes de Bézier valeur (par exemple) 2 utiliser inkscapemap attention : -il faut mettre l'unité en px et les dimensions de la page en valeur entière. -paramétrer le format de sortie: Préférence d'Inkscape/Sortie SVG: retirer coordonnées relatives et cocher imposer les commandes répétitives. -enregister sous le format "SVG simple" -mais cela ne prémuni pas des pb du aux transforms (scale, rotate, translate...) que je résous en faisant un copie/coller sur place. -certaine forme n'apparaissait pas j'ai résolu en leur appliquant une union. cette application, bien que pas très stable, à l'avantage de pouvoir définir plusieurs zones et par l'union de plusieurs polygones définir une unique zone. cela dit une petite adaptation de ton code pourrait faire aussi l'affaire. une fois la segmentation des courbes effectuées. je n'ai pas trouvé d'outil qui permettrait de visualiser les areas directement sur l'image dans un navigateur, le plus proche est ce "mapper". pour test: une fois téléchargé, en remplaçant leur exemple par le code ci-dessous et en incluant l'image test.png dans le dossier: Code :
on peut ainsi tester les différences de zones. |
||
|
|
00
|
|
|
#11 | |
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
Citation:
Tu veux dire que gimp ne genère pas les points sur la courbe ? Il me semble pourtant que lorsque je demande à gimp de tracer le chemin, il colle parfaitement à la forme du polygone ? Par contre il y a en effet un decalage au niveau de l'arrondi des pixels. Pour ce qui est de passer direct par SVG, cela ma semble evident que cela est possible vu que gimp génère un fichier svg. Pour l'union des zones, je en comprends pas non plus vu que pour moi un area est une seule et même zone contiguë...
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
|
|
|
00
|
|
|
#12 | |||
|
Expert Confirmé Sénior
![]() Diem VOVivre Inscription : avril 2006 Messages : 2 772 ![]() |
Citation:
l'utilisation du symbole "C" dans le SVG définit les points avec les points de contrôles de la courbe. tu peux mieux le comprendre ici (le lien fonctionne occasionnellement ces derniers jours) donc s'il te semble que c'est correct c'est que les points de contrôles sont proche de la courbe mais tu constateras qu'il y a un chevauchement de la partie jaune celui "de 11h" sur le violet. tu peux visualiser l'area dans inkscape en remplaçant dans le svg le "C" par un vide via un éditeur de texte simple. cela traduit ton algo: conversion des points de définition de courbe en point polygonale. tu comprends donc que si les points de contrôles sont éloignés ça fausse tout. Citation:
Citation:
|
|||
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
Ha oki...
Pour ce qui est de l'utilsation directe du SVG... c'est encore mal implémenté, ça passe sous ffx, mais pas sur pour IE
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() Diem VOVivre Inscription : avril 2006 Messages : 2 772 ![]() |
oui, j'ai lu qu'IE ne le gére pas mais le SVG devrait être inclus dans l'HTML5 et il me semble avoir vu des solus pour IE. c'est toujours bon à savoir.
sinon l'emploi d'un xslt, php, js... pour incorporer automatiquement les areas définit par un SVG serait peut-être intéressant en attendant? cela éviterait ces étapes intermédiaires... curieusement je n'ai pas vu ça à croire que ce n'est pas intéressant où qu'il y a mieux comme méthode pour gérer le survole de zones irrégulières... |
|
|
00
|
|
|
#15 |
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
je ne vois pas d'autre methode pour le survol de zones irregulières que les polygones
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : septembre 2010 Messages : 3 ![]() |
Bonjour,
Un grand merci à SpaceFrog pour ce script. Étant assez réfractaire au javascript (ce n'est pas un choix, c'est juste qu'il me manque un tuto pour l'aborder qui me convienne), je peux enfin poursuivre la construction de mon site comme je l'ai imaginé. Cependant, j'ai besoin qu'au survol d'une zone, en plus du changement d'image, une info-bulle apparaisse. Comment faire ? |
|
|
00
|
|
|
#17 |
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
soit tu utilises le alt ou mieux le title pour te servir de l'infobulle standrad du navigateur
soit tu lances une fonction infobulle perso Code :
onmouseover="swapPic(this,2);infobulle(this,'texteinfobulle')" il existe des scripts d'infobulle tout faits (voire des addon jquery) pour ne recommander que mon ami Daniel : http://danielhagnoul.developpez.com/...ip/tooltip.php
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
|
|
00
|
|
|
#18 | |
|
Invité de passage
![]() Inscription : septembre 2010 Messages : 3 ![]() |
Le code que tu m'as donné, ben il y a un délai entre le mouseover et l'apparition du texte. Or, je voudrais que ça apparaisse aussi vite que le changement d'image, et pouvoir le placer au-dessus du curseur.
Citation:
Pour info, j'ai 286 zones. Je sais pas si c'est utile à dire, mais au cas ou... |
|
|
|
00
|
|
|
#19 |
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 812 ![]() |
délai pour l'infobulle avec alt ou title ?
ça depend du navigateur... pour ce qui est du script de l'infobulle as tu été voir le lien donné ??? Daniel propose un script d'infobulle tout fait, sinon tu devras toi même coder ton infobulle en faisant apparaitre / dipsaraitre un div que tu rempliras avec le texte voulu et tu le placeras à l'endroit voulu ...
__________________
Ma page Developpez - Mon Blog Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
|
|
00
|
|
|
#20 |
|
Invité de passage
![]() Inscription : septembre 2010 Messages : 3 ![]() |
Si, j'ai suivi le lien... Mais quand j'essaye le code, par un simple copier/coller, ça ne fonctionne pas...
Je sais pas pourquoi et ça m'agace profondément. Sinon, j'avais trouvé un code pour faire apparaitre disparaitre une info-bulle dans un div. Sur leur exemple, ça marche très bien. Mais quand je l'ajoute à ma carte, le curseur redevient une flèche et "sautille". Et quand je quitte la zone, ben ça reste affiché... |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com