Texte en survolant zone image

Eléphant du PHP | 256 Messages

09 sept. 2013, 21:48

Bonjour,
Je cherche un moyen d'afficher un texte explicatif en survolant certaines zones d 'une image.
J'ai trouvé un moyen simple; on peut voir un exemple ici http://www.rudyv.be/PilotePrive/Historique.php, la photo du tableau de bord tout en bas.
<img src="F-GLVJ-cockpit.jpg" border="0" title="" alt="" usemap="#Board" />
<map name="Board">
<area shape="circle" coords="383,239,30" title="Anémomètre">
</map>
En laissant la souris dans la zone dont les coordonnées sont définies, le texte "Anémomètre" apparaît bien mais
1) il faut laisser la souris dans la zone pendant "un certain temps" avant qu'il apparaisse;
2) rien n'indique que la zone en question est une zone sensible;
je voudrais par exemple que le pointeur change ou, mieux, que la zone en question change d'aspect quand on passe dessus.

Je pense que la solution existe probablement en JS, raison pour laquelle je mets cette question dans cette section.
Merci d'avance pour vos réponses.

Mammouth du PHP | 790 Messages

10 sept. 2013, 08:18

Salut, voici un exemple de fonctionnement d la fonction hover: http://jquery.developpeur-web2.com/docu ... /hover.php
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 256 Messages

10 sept. 2013, 14:29

Bonjour,
Merci pour la réponse mais je pense que je me suis mal exprimé.
Je ne cherche pas une fonction Javascript qui exécute une action quand on passe sur la zone avec la souris
mais un moyen, probablement en Javascript, de mettre en évidence la zone survolée et d'afficher une infobulle.

Je pense qu'il faut invoquer la procédure Javascript ainsi
<area shape="poly/rect/circle" 
coords="x,y,z"
onMouseOver="script1" 
onMouseOut="script2>
Ce que je voudrais c'est que Script1 mette en évidence la zone définie par les coords du shape et qu'une infobulle apparaisse, et que Script2 affiche l'image originale, exemple

Image

Image

Mais je ne connais pas grand chose en Javascript et ne tiens d'ailleurs pas à ce que la soultion utilise Javascript !

Mammouth du PHP | 790 Messages

10 sept. 2013, 15:00

Autant pour moi...
As-tu regardé avec tool-type, est ce que ca marche sur une area ?

Si non, pour définir facilement les points tu peut utiliser Gimp, il possède une option: Filtre > web > images cliquables
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 256 Messages

10 sept. 2013, 15:56

La question n'est pas de définir les points (j'ai facilement les coordonnées avec un logiciel de retouche d'image) mais de prendre l'action adéquate quand on survole la zone.
Ce que je pourrais faire, c'est une image différente pour chaque instrument du tableau de bord, et afficher l'image correspondante quand on survole l'instrument en question, mais ça va faire beaucoup d'images !

Je ne comprends pas "tool-type".
Dans l'exemple ci-dessus, le texte apparaît dans un tooltip (infobulle) en utilisant l'attribut "title" dans le tag "area"; le défaut est qu'il apparaît trop lentement.

Mammouth du PHP | 790 Messages

10 sept. 2013, 16:05

La fonction toolTip (pardon) ais avec jquery: http://jqueryui.com/tooltip/#custom-content
Regarde aussi sur la droite des exemples d'utilisations...
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 256 Messages

10 sept. 2013, 16:19

Si je comprends bien, ce widget permet de personnaliser l'infobulle.
Je souhaite afficher une bête infobulle mais aussi indiquer quelles sont les zones actives en modifiant leur aspect quand on passe dessus; je ne pense pas que ce widget le permette.

Mammouth du PHP | 790 Messages

10 sept. 2013, 16:50

Ok alors tu peux peut être en css donner un background et une opacité/transparence en jouent avec hover
Est ce que tu arrive a mettre du css dans <area>
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

10 sept. 2013, 17:16

Bon, a 1ere vu, tu ne pourra pas le faire en css, la balise area n’étant pas censé contenir de contenu, un background ne s'affichera pas...
Voila une solution avec jquery: http://davidlynch.org/projects/maphilight/docs/
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 256 Messages

10 sept. 2013, 17:23

CSS ne marche pas sur les area/map il faut utiliser javascript avec omousehover onmouseout mais je ne sais pas comment faire.
Comment éclaircir ou agrandir ou entourer une zone d'une image et comment afficher un texte style infobulle en javascript ?

Eléphant du PHP | 256 Messages

10 sept. 2013, 17:41

La solution avec Jquery est exactement ce que je cherche, notamment l'exemple de la carte mondiale http://davidlynch.org/projects/maphilig ... world.html.
J'ai essayé : le tooltip s'affiche bien mais pas la modification de l'image.
Voici mon code
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
	<script type="text/javascript" src="../jquery.maphilight.min.js"></script>
	<script type="text/javascript">$(function() {
		$('.map').maphilight({fade: false});
	});</script>
</head>

<body background="DiapoCiel.jpg" text="#00FFFF">

<img class="map" src="F-GLVJ-cockpit.jpg" border="0" usemap="#Board" />

<map name="Board">
<area href="#" shape="rect" coords="371,127,568,145" title="Témoins d'alarmes">
<area href="#" shape="circle" coords="383,239,30" title="Anémomètre">
</map>

</html>
Qu'est-ce que j'ai mal fait ?

Mammouth du PHP | 790 Messages

11 sept. 2013, 11:35

Bon, comme je ne comprenais pas pourquoi ca ne fonctionnais pas, j'ai tester et j'ai réussi mais j'ai un soucis, je ne sais toujours pas pourquoi et je ne peux pas t'en dire plus !!!
En revanche, je suis sport alors je te donne le code...
<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
        <script>
            (function(G){var B,J,C,K,N,M,I,E,H,A,L;J=!!document.createElement("canvas").getContext;B=(function(){var P=document.createElement("div");P.innerHTML='<v:shape id="vml_flag1" adj="1" />';var O=P.firstChild;O.style.behavior="url(#default#VML)";return O?typeof O.adj=="object":true})();if(!(J||B)){G.fn.maphilight=function(){return this};return }if(J){E=function(O){return Math.max(0,Math.min(parseInt(O,16),255))};H=function(O,P){return"rgba("+E(O.substr(0,2))+","+E(O.substr(2,2))+","+E(O.substr(4,2))+","+P+")"};C=function(O){var P=G('<canvas style="width:'+O.width+"px;height:"+O.height+'px;"></canvas>').get(0);P.getContext("2d").clearRect(0,0,P.width,P.height);return P};var F=function(Q,O,R,P,S){P=P||0;S=S||0;Q.beginPath();if(O=="rect"){Q.rect(R[0]+P,R[1]+S,R[2]-R[0],R[3]-R[1])}else{if(O=="poly"){Q.moveTo(R[0]+P,R[1]+S);for(i=2;i<R.length;i+=2){Q.lineTo(R[i]+P,R[i+1]+S)}}else{if(O=="circ"){Q.arc(R[0]+P,R[1]+S,R[2],0,Math.PI*2,false)}}}Q.closePath()};K=function(Q,T,U,X,O){var S,P=Q.getContext("2d");if(X.shadow){P.save();if(X.shadowPosition=="inside"){F(P,T,U);P.clip()}var R=Q.width*100;var W=Q.height*100;F(P,T,U,R,W);P.shadowOffsetX=X.shadowX-R;P.shadowOffsetY=X.shadowY-W;P.shadowBlur=X.shadowRadius;P.shadowColor=H(X.shadowColor,X.shadowOpacity);var V=X.shadowFrom;if(!V){if(X.shadowPosition=="outside"){V="fill"}else{V="stroke"}}if(V=="stroke"){P.strokeStyle="rgba(0,0,0,1)";P.stroke()}else{if(V=="fill"){P.fillStyle="rgba(0,0,0,1)";P.fill()}}P.restore();if(X.shadowPosition=="outside"){P.save();F(P,T,U);P.globalCompositeOperation="destination-out";P.fillStyle="rgba(0,0,0,1);";P.fill();P.restore()}}P.save();F(P,T,U);if(X.fill){P.fillStyle=H(X.fillColor,X.fillOpacity);P.fill()}if(X.stroke){P.strokeStyle=H(X.strokeColor,X.strokeOpacity);P.lineWidth=X.strokeWidth;P.stroke()}P.restore();if(X.fade){G(Q).css("opacity",0).animate({opacity:1},100)}};N=function(O){O.getContext("2d").clearRect(0,0,O.width,O.height)}}else{C=function(O){return G('<var style="zoom:1;overflow:hidden;display:block;width:'+O.width+"px;height:"+O.height+'px;"></var>').get(0)};K=function(P,T,U,X,O){var V,W,R,S;for(var Q in U){U[Q]=parseInt(U[Q],10)}V='<v:fill color="#'+X.fillColor+'" opacity="'+(X.fill?X.fillOpacity:0)+'" />';W=(X.stroke?'strokeweight="'+X.strokeWidth+'" stroked="t" strokecolor="#'+X.strokeColor+'"':'stroked="f"');R='<v:stroke opacity="'+X.strokeOpacity+'"/>';if(T=="rect"){S=G('<v:rect name="'+O+'" filled="t" '+W+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+U[0]+"px;top:"+U[1]+"px;width:"+(U[2]-U[0])+"px;height:"+(U[3]-U[1])+'px;"></v:rect>')}else{if(T=="poly"){S=G('<v:shape name="'+O+'" filled="t" '+W+' coordorigin="0,0" coordsize="'+P.width+","+P.height+'" path="m '+U[0]+","+U[1]+" l "+U.join(",")+' x e" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+P.width+"px;height:"+P.height+'px;"></v:shape>')}else{if(T=="circ"){S=G('<v:oval name="'+O+'" filled="t" '+W+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+(U[0]-U[2])+"px;top:"+(U[1]-U[2])+"px;width:"+(U[2]*2)+"px;height:"+(U[2]*2)+'px;"></v:oval>')}}}S.get(0).innerHTML=V+R;G(P).append(S)};N=function(P){var O=G("<div>"+P.innerHTML+"</div>");O.children("[name=highlighted]").remove();P.innerHTML=O.html()}}M=function(P){var O,Q=P.getAttribute("coords").split(",");for(O=0;O<Q.length;O++){Q[O]=parseFloat(Q[O])}return[P.getAttribute("shape").toLowerCase().substr(0,4),Q]};L=function(Q,P){var O=G(Q);return G.extend({},P,G.metadata?O.metadata():false,O.data("maphilight"))};A=function(O){if(!O.complete){return false}if(typeof O.naturalWidth!="undefined"&&O.naturalWidth===0){return false}return true};I={position:"absolute",left:0,top:0,padding:0,border:0};var D=false;G.fn.maphilight=function(O){O=G.extend({},G.fn.maphilight.defaults,O);if(!J&&!D){G(window).ready(function(){document.namespaces.add("v","urn:schemas-microsoft-com:vml");var Q=document.createStyleSheet();var P=["shape","rect","oval","circ","fill","stroke","imagedata","group","textbox"];G.each(P,function(){Q.addRule("v\\:"+this,"behavior: url(#default#VML); antialias:true")})});D=true}return this.each(function(){var U,R,Y,Q,T,V,X,S,W;U=G(this);if(!A(this)){return window.setTimeout(function(){U.maphilight(O)},200)}Y=G.extend({},O,G.metadata?U.metadata():false,U.data("maphilight"));W=U.get(0).getAttribute("usemap");if(!W){return }Q=G('map[name="'+W.substr(1)+'"]');if(!(U.is('img,input[type="image"]')&&W&&Q.size()>0)){return }if(U.hasClass("maphilighted")){var P=U.parent();U.insertBefore(P);P.remove();G(Q).unbind(".maphilight").find("area[coords]").unbind(".maphilight")}R=G("<div></div>").css({display:"block",background:'url("'+this.src+'")',position:"relative",padding:0,width:this.width,height:this.height});if(Y.wrapClass){if(Y.wrapClass===true){R.addClass(G(this).attr("class"))}else{R.addClass(Y.wrapClass)}}U.before(R).css("opacity",0).css(I).remove();if(B){U.css("filter","Alpha(opacity=0)")}R.append(U);T=C(this);G(T).css(I);T.height=this.height;T.width=this.width;X=function(c){var a,b;b=L(this,Y);if(!b.neverOn&&!b.alwaysOn){a=M(this);K(T,a[0],a[1],b,"highlighted");if(b.groupBy){var Z;if(/^[a-zA-Z][\-a-zA-Z]+$/.test(b.groupBy)){Z=Q.find("area["+b.groupBy+'="'+G(this).attr(b.groupBy)+'"]')}else{Z=Q.find(b.groupBy)}var d=this;Z.each(function(){if(this!=d){var f=L(this,Y);if(!f.neverOn&&!f.alwaysOn){var e=M(this);K(T,e[0],e[1],f,"highlighted")}}})}if(!J){G(T).append("<v:rect></v:rect>")}}};G(Q).bind("alwaysOn.maphilight",function(){if(V){N(V)}if(!J){G(T).empty()}G(Q).find("area[coords]").each(function(){var Z,a;a=L(this,Y);if(a.alwaysOn){if(!V&&J){V=C(U[0]);G(V).css(I);V.width=U[0].width;V.height=U[0].height;U.before(V)}a.fade=a.alwaysOnFade;Z=M(this);if(J){K(V,Z[0],Z[1],a,"")}else{K(T,Z[0],Z[1],a,"")}}})});G(Q).trigger("alwaysOn.maphilight").find("area[coords]").bind("mouseover.maphilight",X).bind("mouseout.maphilight",function(Z){N(T)});U.before(T);U.addClass("maphilighted")})};G.fn.maphilight.defaults={fill:true,fillColor:"000000",fillOpacity:0.2,stroke:true,strokeColor:"ff0000",strokeOpacity:1,strokeWidth:1,fade:true,alwaysOn:false,neverOn:false,groupBy:false,wrapClass:true,shadow:false,shadowX:0,shadowY:0,shadowRadius:6,shadowColor:"000000",shadowOpacity:0.8,shadowPosition:"outside",shadowFrom:false}})(jQuery);
        </script>
        <script type="text/javascript">$(function() {
                $('.map').maphilight({fade: false});
            });</script>
    </head>
    <body>
        <img class="map" src="http://www.rudyv.be/PilotePrive/F-GLVJ-cockpit.jpg" width="800" height="400" usemap="#Board">
        <map name="Board">
            <area href="#" shape="rect" coords="371,127,568,145" title="Témoins d'alarmes">
            <area href="#" shape="circle" coords="383,239,30" title="Anémomètre">
        </map>

    </body>
</html>
Voila essaye le !
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 256 Messages

11 sept. 2013, 13:00

Merci mais entretemps j'ai trouvé aussi !
Voir résultat ici http://www.rudyv.be/PilotePrive/Album.php#