A voir également:
- Javascript /cartes graphiques
- Telecharger javascript - Télécharger - Langages
- Whatsapp avec 2 cartes sim - Guide
- Jeux de cartes gratuits à télécharger - Télécharger - Cartes
- Afficher un tableau javascript en html ✓ - Forum Javascript
- Graphiques sparkline - Guide
2 réponses
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
2 mars 2002 à 16:26
2 mars 2002 à 16:26
Salut Patrick
Ton pb n'est pas simple et l'emploi de Flash serait peut être plus approprié.
Quoiqu'il en soit voici un (long) ex en Javascript qui répondra j'espère à ta question.
<html>
<head>
<style>
.hide {position:absolute; left:-5000px; overflow:hidden;}
</style>
<script language="JavaScript">
<!--
function ClipObject(dX,dY,sX,sY)
{
this.dX=dX || 0
this.dY=dY || 0
this.sX=sX || 0
this.sY=sY || 0
}
ClipObject.prototype=new DivObject
// Object qui va référence un layer <DIV> HTML positionner de manière absolue
function DivObject(id,x,y)
{
this.ref=window.document.getElementById(id);
this.clip=new ClipObject(0,0,0,0);
this.x=x || 0
this.y=y || 0
this.visible=false;
}
function divObject_hide()
{
this.ref.style.left="-5000px"
this.visible=false;
}
DivObject.prototype.hide=divObject_hide
function divObject_show()
{
this.setPos(this.x,this.y);
this.visible=true;
}
DivObject.prototype.show=divObject_show
// Définir un découpage pour l'objet
// x,y : coordonnées où la zone doit s'afficher
// si l'objet est contenu ds un autre <DIV> alors la position est relative au <DIV> parent
// dX, dY : coin haut gauche de départ pour la zone à définir
// sX, sY : largeur et hauteur de la zone
// Nota : si aucun décalage n'est nécessaire on doit avoir x=dX et y=dY
function divObject_setClip(x,y,dX,dY,sX,sY)
{
this.clip.dX=dX || 0
this.clip.dY=dY || 0
this.clip.sX=sX || 0
this.clip.sY=sY || 0
sX=this.clip.sX+this.clip.dX-1
sY=this.clip.sY+this.clip.dY-1
this.ref.style.clip="rect("+this.clip.dY+","+sX+","+sY+","+this.clip.dX+")";
// Recalcul des coordonnées pour tenir compte du décalage de la position de départ
// setPos() ou show() doit être appeler ensuite ...
this.x=x-dX
this.y=y-dY
}
DivObject.prototype.setClip=divObject_setClip
// Définir les dimensions de l'objet DIV
function divObject_setSize(sX,sY)
{
this.setWidth(sX)
this.setHeight(sY)
}
DivObject.prototype.setSize=divObject_setSize
// Définir la position absolue de l'objet DIV
function divObject_setPos(x,y)
{
this.setX(x)
this.setY(y)
this.visible=true;
}
DivObject.prototype.setPos=divObject_setPos
// Définir la largeur de l'objet DIV
function divObject_setWidth(sX)
{
this.ref.style.width=sX+"px"
}
DivObject.prototype.setWidth=divObject_setWidth
// Définir la hauteur de l'objet DIV
function divObject_setHeight(sY)
{
this.ref.style.height=sY+"px"
}
DivObject.prototype.setHeight=divObject_setHeight
// Définir la position horizontale de l'objet DIV
function divObject_setX(x)
{
this.x=x
this.ref.style.left=x+"px"
}
DivObject.prototype.setX=divObject_setX
// Définir la position verticale de l'objet DIV
function divObject_setY(y)
{
this.y=y
this.ref.style.top=y+"px"
}
DivObject.prototype.setY=divObject_setY
function Frame(id)
{
this.base=DivObject
this.base(id)
this.areas=new Array()
}
Frame.prototype=new DivObject("");
function frame_newArea(id)
{
return this.areas[this.areas.length]=new DivObject(id);
}
Frame.prototype.newArea=frame_newArea
function frame_showArea(idx)
{
area=this.areas[idx]
if (area.visible) return
area.show()
}
Frame.prototype.showArea=frame_showArea
function frame_hideArea(idx)
{
area=this.areas[idx]
if (!area.visible) return
area.hide()
}
Frame.prototype.hideArea=frame_hideArea
function load()
{
cadre=new Frame("cadre0");
cadre.setPos(0,50);
ref=cadre.newArea("elt0");
ref.setClip(0,0,0,0,100,100);
ref=cadre.newArea("elt1");
ref.setClip(100,0,0,0,100,100);
}
// -->
</script>
</head>
<body onload="load()">
<map name="map1">
<area href="#" shape="rect" coords="0,0,99,99" alt="Zone 0" onmouseover="cadre.showArea(0)" >
<area href="#" shape="rect" coords="100,0,199,99" alt="Zone 1" onmouseover="cadre.showArea(1)" >
</map>
<div id="cadre0" class=hide>
<img border=0 src="fond.jpg" usemap="#map1">
<div id="elt0" class=hide onmouseout="cadre.hideArea(0)">
<img border=0 src="zone1.jpg" >
</div>
<div id="elt1" class=hide onmouseout="cadre.hideArea(1)">
<img border=0 src="zone0.jpg" >
</div>
</div>
</body>
</html>
Pout tester tu copies cette page dans un répertoire dans lequel tu places 3 images que tu appelles :
fond.jpg (au moins 200x100)
zone0.jpg (au moins 100x100)
zone1.jpg (au moins 100x100)
Dans l'ex j'affiche l'image fond.jpg comme fond et je définis 2 zones clicable sur cette image de 100x100 à partir du coin haut gauche et qui se suivent.
Lorsque tu survoles la première zone j'affiche une partie de l'image zone0. jpg et pour la seconde une partie de l'image zone1.jpg
Nota : tu peux utiliser une seule image pour zone0.jpg et zone1.jpg : dans ce cas modifie le code .
Restriction : seule des zones rectangulaires peuvent être utilisées.
Ca ne marche qu'avec IE 5 ou + !
Voilà
Si tu as des questions n'hésite pas ...
@+
Philippe
[[ The Truth is Out There ]]
Ton pb n'est pas simple et l'emploi de Flash serait peut être plus approprié.
Quoiqu'il en soit voici un (long) ex en Javascript qui répondra j'espère à ta question.
<html>
<head>
<style>
.hide {position:absolute; left:-5000px; overflow:hidden;}
</style>
<script language="JavaScript">
<!--
function ClipObject(dX,dY,sX,sY)
{
this.dX=dX || 0
this.dY=dY || 0
this.sX=sX || 0
this.sY=sY || 0
}
ClipObject.prototype=new DivObject
// Object qui va référence un layer <DIV> HTML positionner de manière absolue
function DivObject(id,x,y)
{
this.ref=window.document.getElementById(id);
this.clip=new ClipObject(0,0,0,0);
this.x=x || 0
this.y=y || 0
this.visible=false;
}
function divObject_hide()
{
this.ref.style.left="-5000px"
this.visible=false;
}
DivObject.prototype.hide=divObject_hide
function divObject_show()
{
this.setPos(this.x,this.y);
this.visible=true;
}
DivObject.prototype.show=divObject_show
// Définir un découpage pour l'objet
// x,y : coordonnées où la zone doit s'afficher
// si l'objet est contenu ds un autre <DIV> alors la position est relative au <DIV> parent
// dX, dY : coin haut gauche de départ pour la zone à définir
// sX, sY : largeur et hauteur de la zone
// Nota : si aucun décalage n'est nécessaire on doit avoir x=dX et y=dY
function divObject_setClip(x,y,dX,dY,sX,sY)
{
this.clip.dX=dX || 0
this.clip.dY=dY || 0
this.clip.sX=sX || 0
this.clip.sY=sY || 0
sX=this.clip.sX+this.clip.dX-1
sY=this.clip.sY+this.clip.dY-1
this.ref.style.clip="rect("+this.clip.dY+","+sX+","+sY+","+this.clip.dX+")";
// Recalcul des coordonnées pour tenir compte du décalage de la position de départ
// setPos() ou show() doit être appeler ensuite ...
this.x=x-dX
this.y=y-dY
}
DivObject.prototype.setClip=divObject_setClip
// Définir les dimensions de l'objet DIV
function divObject_setSize(sX,sY)
{
this.setWidth(sX)
this.setHeight(sY)
}
DivObject.prototype.setSize=divObject_setSize
// Définir la position absolue de l'objet DIV
function divObject_setPos(x,y)
{
this.setX(x)
this.setY(y)
this.visible=true;
}
DivObject.prototype.setPos=divObject_setPos
// Définir la largeur de l'objet DIV
function divObject_setWidth(sX)
{
this.ref.style.width=sX+"px"
}
DivObject.prototype.setWidth=divObject_setWidth
// Définir la hauteur de l'objet DIV
function divObject_setHeight(sY)
{
this.ref.style.height=sY+"px"
}
DivObject.prototype.setHeight=divObject_setHeight
// Définir la position horizontale de l'objet DIV
function divObject_setX(x)
{
this.x=x
this.ref.style.left=x+"px"
}
DivObject.prototype.setX=divObject_setX
// Définir la position verticale de l'objet DIV
function divObject_setY(y)
{
this.y=y
this.ref.style.top=y+"px"
}
DivObject.prototype.setY=divObject_setY
function Frame(id)
{
this.base=DivObject
this.base(id)
this.areas=new Array()
}
Frame.prototype=new DivObject("");
function frame_newArea(id)
{
return this.areas[this.areas.length]=new DivObject(id);
}
Frame.prototype.newArea=frame_newArea
function frame_showArea(idx)
{
area=this.areas[idx]
if (area.visible) return
area.show()
}
Frame.prototype.showArea=frame_showArea
function frame_hideArea(idx)
{
area=this.areas[idx]
if (!area.visible) return
area.hide()
}
Frame.prototype.hideArea=frame_hideArea
function load()
{
cadre=new Frame("cadre0");
cadre.setPos(0,50);
ref=cadre.newArea("elt0");
ref.setClip(0,0,0,0,100,100);
ref=cadre.newArea("elt1");
ref.setClip(100,0,0,0,100,100);
}
// -->
</script>
</head>
<body onload="load()">
<map name="map1">
<area href="#" shape="rect" coords="0,0,99,99" alt="Zone 0" onmouseover="cadre.showArea(0)" >
<area href="#" shape="rect" coords="100,0,199,99" alt="Zone 1" onmouseover="cadre.showArea(1)" >
</map>
<div id="cadre0" class=hide>
<img border=0 src="fond.jpg" usemap="#map1">
<div id="elt0" class=hide onmouseout="cadre.hideArea(0)">
<img border=0 src="zone1.jpg" >
</div>
<div id="elt1" class=hide onmouseout="cadre.hideArea(1)">
<img border=0 src="zone0.jpg" >
</div>
</div>
</body>
</html>
Pout tester tu copies cette page dans un répertoire dans lequel tu places 3 images que tu appelles :
fond.jpg (au moins 200x100)
zone0.jpg (au moins 100x100)
zone1.jpg (au moins 100x100)
Dans l'ex j'affiche l'image fond.jpg comme fond et je définis 2 zones clicable sur cette image de 100x100 à partir du coin haut gauche et qui se suivent.
Lorsque tu survoles la première zone j'affiche une partie de l'image zone0. jpg et pour la seconde une partie de l'image zone1.jpg
Nota : tu peux utiliser une seule image pour zone0.jpg et zone1.jpg : dans ce cas modifie le code .
Restriction : seule des zones rectangulaires peuvent être utilisées.
Ca ne marche qu'avec IE 5 ou + !
Voilà
Si tu as des questions n'hésite pas ...
@+
Philippe
[[ The Truth is Out There ]]
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
2 mars 2002 à 16:29
2 mars 2002 à 16:29
Ooops !
Supprime la ligne suivante dans le code :
ClipObject.prototype=new DivObject
Ca ne sert à rien !
@+
PHP
[[ The Truth is Out There ]]
Supprime la ligne suivante dans le code :
ClipObject.prototype=new DivObject
Ca ne sert à rien !
@+
PHP
[[ The Truth is Out There ]]
2 mars 2002 à 19:31
Il va me falloir un peu de temps pour éplucher tout ce code car je ne suis pas un "javascripteur en chef " (je préfère faire du graphisme aux codes de programmation !!!) d'autant plus que mes deux images de 767 x 484 doivent avoir 8 zones sensibles, donc je ne suis pas au bout de mes peines....
Si je bloque, je me permettrai de te relancer...
Merci encore
Patrick