Je cherche à faire un petit effet en javascript mais je ne sais pas du tout comment m’y prendre.
Pour expliquer un peu :
J’ai fait un table avec trois cases, la deuxième devrait être caché et un lien situé dans la première devrait pouvoir faire un effet d’ouverture pour afficher la seconde, si c’est possible j’aimerai faire le même effet dans l’autre sens pour fermer la deuxième case.
Le tout en XHTML “standart” si c’est possible aussi.
Je ne sais pas trop ce que entend par un “effet d’ouverture”, mais s’il s’agit juste d’afficher/cacher un élément, tu vas devoir utiliser le style visibility appliqué à un span ou div.
function getRefToDiv(divID) {
if( document.layers ) { //Netscape layers
return document.layers[divID]; }
if( document.getElementById ) { //DOM; IE5, NS6, Mozilla, Opera
return document.getElementById(divID); }
if( document.all ) { //Proprietary DOM; IE4
return document.all[divID]; }
if( document[divID] ) { //Netscape alternative
return document[divID]; }
return false;
}
function toggleT(div_name,affich) {
myReference = getRefToDiv(div_name);
if( !myReference ) {
return false;
}
if( myReference.style ) { //DOM and proprietary DOM
myReference.style.visibility = (affich=='s')?'visible':'hidden';
} else {
if( myReference.visibility ) { //Netscape
myReference.visibility = (affich=='s')?'show':'hide';
} else {
return false;
}
}
return true;
}
Voilà les deux petites fonctions (pas de moi je l’avoue) que j"utilise dans ce genre de cas. Tu appeles toggleT en passant le nom du div et si tu veux l’afficher ou le cacher. Une petite modif permet sans problèmes de juste passer le div, et la fonction se charge de savoir s’il faut afficher ou cacher.
La fonction getRefToDiv retourne la ref dom du div en fonction du navigateur.
Ce n’est pas parfait mais c’est déjà ça n’est-ce pas?
Ahhhh mais border, BodySplash, quel code horrible :P.
A mon tour de jouer 
[edit] fautes dans le html
Pour info j’utilise ce procédé ca dans la recherche avancée de http://www.tazzoo.com/
[code]
[/code]
On se calme, c’est moi l’arbite, alors, pour la compatibilité, je m’en fout totalement de netscape 4.0, du moment que c’est IE, Firefox Power enfin des trucs récents quoi.
J’ai adopté la méthode de Percil, sur un span.
Mais j’aurais aimé un effet visuelle genre déroulement. Mais en réfléchissant, c’est pas utile, si vous avez ça en stock je suis quand même preneur du moment que c’est fluide rapide, discret et que ca ne fait pas mal au yaux
.
BodySplash, tu chipotes. Mon code a l’avantage d’etre compatible DOM, donc tout navigateur supportant le DOM le supporte. Netscape 4, mais qui navigue encore avec cette antiquité?
Pour le déroulement progressif, tu doit connaitre la hauteur de ta span.
Hint:
[code]var iOpeningSpeed = 4;
var iMaxHeight = 400;
var iSpeed = 0;
var iLimit = iMaxHeight;
var rTimer;
function setState(sId, sState)
{
if(sState==“open”)
{
iSpeed = iOpeningSpeed;
iLimit = iMaxHeight;
}
else
{
iSpeed = iOpeningSpeed;
iLimit = 0;
}
rTimer = setInterval(“timedOpening()”,200);
}
function timedOpening()
{
… j’ai la flemme de compléter, en gros tu incrémente ou décrémente de iSpeed a chaque passage…
}[/code]
J’ai testé, et c’est moche, ca fait un effet saccadé qui n’est pas pareille sur Firefox que sur IE, je laisse tomber, je préfère un effet “propre” qui s’ouvre et se ferme en une fois.
normal j’ai foutu un timing a 200 de la fonction. pour bien faire, il faudrait mettre un timing genre 10, et une valeur de vitesse tres petite.
[quote name=’[PERE]Cil’ date=’ 10 Dec 2004, 10:46’]normal j’ai foutu un timing a 200 de la fonction. pour bien faire, il faudrait mettre un timing genre 10, et une valeur de vitesse tres petite.
[right][post=“311675”]<{POST_SNAPBACK}>[/post][/right][/quote]
T’inquiète, j’ai modifié cette valeur mais le résultat n’était quand même pas terrible sous Gecko et IE.