Bonjour, je suis nouveau sur le forum. Je commence par une question à laquelle je n'ai pas trouvé de réponse :

Je créer actuellement un site commercial, pour ma famille.

J'ai un problème pour réaliser les bouton du menu du site.

Le principe est le suivant :

Les liens du menu sont précédés d'une image qui fait partie du lien.

Lorsque l'on passe la souris sur le lien, l'image est remplacée par une autre image.

J'ai trouvé une solution pour Firefox et les autres, mais pas pour IE 6/7 :

En javascript, j'ai entre les balises de mon site le code suivant :

<script type="text/javascript">
<!--
// PRELOADING IMAGES
if (document.images) {

 img1_on =new Image(); img1_on.src ="./images/image2.png"; 
 img1_off=new Image(); img1_off.src="./images/image1.png";

img2_on =new Image(); img2_on.src ="./images/image2.png"; 
img2_off=new Image(); img2_off.src="./images/image1.png"; 

[...] Jusqu'à img10, une pour chaque élément du menu, c'est pas propre comme code selon moi, mais je ne connais rien en javascript...  [ohwell] 

function movr(k) {
 if (document.images) 
  eval('document.img'+k+'.src=img'+k+'_on.src');
}

function mout(k) {
 if (document.images) 
  eval('document.img'+k+'.src=img'+k+'_off.src');
}

function handleOver() {
 if (document.images) 
  document.imgName.src=img_on.src;
}

function handleOut() {
 if (document.images) 
  document.imgName.src=img_off.src;
}

//-->
</script>
 


Puis dans le menu j'ai ceci, pour chaque élément :


<li><a href="page.html" onmouseover="javascript:movr(9);return true;" onmouseout="javascript:mout(9);return true;"><img id="img1" alt="description" src="./images/image1.png" />lien vers page.html</a></li>


J'aimerais faire fonctionner ceci pour IE 6 et 7, en plus de Firefox... Une idée?

J'aurais préféré le faire en html+css, mais mon dernier essai c'est soldé par un affichage ignoble sur IE 7 :

J'avais fait ceci, sur les conseil de mon frère :

Dans la feuille css :



.menu li
{
list-style-image: url=("../images/image1.png");
}

.menu li:hover
{
list-style-image: url=("../images/image2.png");
}



ça marchait sur firefox, mais sur IE, c'était ignoble. Le menu (vertical à l'origine) était sur deux colones, et me repoussait en bas ma div de contenu de page, les verres s'affichaient aléatoirement... Devant l'horreur, je suis repassé au code javascipt, qui n'affiche rien sous IE mais ne fait pas de décalages ignobles de ce genre.

Bref, si vous avez des idées, n'hésitez pas : je suis débutant.

PS : y a t'il moyen de simplifier la fonction javascript?

*edit : j'ai choisi un doctype xhtml strict...
Modifié par Arctinurus (02 Mar 2009 - 18:57)
Je préfère que l'image soit cliquable : plusieurs personnes m'avait fait la remarque dans la première version de ce menu ou les images n'étaient pas cliquables... mais je vais tout de même faire un essai : je ne connaissais pas cette technique!
Avec les portes coulissantes, les images ne seront toujours pas cliquable.

Pour ton javascript, un petit script à base de onFocus sur l'image en question devrait être plus simple et plus efficace que ton script actuel.

Un truc du genre :
<img src="..." alt="" onFocus="Javascript: this.src();"


à toi de trouver l'attribut exact pour changer la source de l'image ^^;

Et prévoir l'évènement OnBlur également
Modifié par Laurie-Anne (02 Mar 2009 - 15:11)
Aille là le soucis c'est que j'ai pas le niveau en javascript. En clair, avec onfocus, ça va charger une fonction? Qu'il faut que je trouve?

J'en suis aux portes coulissantes en test là, c'est pas mal. J'ai adapté en jouant sur un masquage vertical, plutôt qu'horizontal, car il m'est plus facile de définir une hauteur de police que de savoir la largeur du texte : inconvénient, le visiteur ne peut plus changer de taille de texte... Ou si il peut, ça découvrira l'image cachée...

Gros problème : l'image de fond est sous le texte Smiley decu
Modifié par Arctinurus (02 Mar 2009 - 15:28)
Merci beaucoup pour l'idée des portes coulissantes! je viens de l'appliquer avec succès (pour Firefox...) !

Reste à voir avec IE et opéra.

Par contre, l'image est dans une zone cliquable, peut-être grâce à "display: block"...
Arctinurus a écrit :

1* inconvénient, le visiteur ne peut plus changer de taille de texte... Ou si il peut, ça découvrira l'image cachée...

2*Gros problème : l'image de fond est sous le texte Smiley decu


*1- Prévoir une image suffisemment grande/haute pour ce cas de figure Smiley cligne
*2- En quoi est-ce problématique ?

C'est à mon avis LA solution pour ton projet Smiley cligne
Modifié par 6l20 (02 Mar 2009 - 17:50)
Bon, j'ai résolu complètement le problème grâce à cette solution.

Pour 1: l'image est assez grande en fait : 25px, la police standard à de la place.

Pour 2 le problème est réglé par text-indent appliqué à la même balise.

Le soucis était que mon image sert de puce comme ceci :

Smiley smile Lien du menu normal...

Puis

Smiley lol Lien du menu survolé ou recevant le focus.

Si la puce est derrière le texte, ce n'est pas beau. Avec text-indent, j'ai laissé la place de la puce + un espace.

Edit : Et c'est nickel sous :

Opéra et Firefox sous Gnu/Linux
IE7 et Firefox sous Windows...

Reste IE6 mais je ne l'ai pas... Je vais voir ça au plus vite.
Modifié par Arctinurus (02 Mar 2009 - 17:51)
Et bien voilà un bonne nouvelle Smiley smile
Un padding-left devrait également fonctionner Smiley cligne

Tu considères ce sujet comme [résolu]?

Cdt,
Sylvain
Arctinurus a écrit :
Comme ça, ça convient? Smiley smile

Merci beaucoup pour l'aide... Bon, demain, j'attaque un autre problème Smiley langue

C'est parfait Smiley cligne
Merci surtout à Laurie-Anne Smiley smile
Oui merci beaucoup à Laurie-Anne Smiley smile

Je dirais pas que tu m'as sauvé la vie, mais épargné une crise de nerf Smiley langue