IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Chargement d'image lors d'un changement 'dynamique'


Sujet :

JavaScript

  1. #1
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut Chargement d'image lors d'un changement 'dynamique'
    Bonjour,

    J'ai fait un petit script pour changer certaines de mes images lorsqu'on les survole avec la souris. Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    function changerImage(event) {
    	Event.stop(event);
    	var image = Event.element(event).src;
     
    	var newImage = new Image();
    	newImage.src = image.substring(0, image.lastIndexOf('.')) + "-over.png";
     
    	if(newImage.complete) {	
    		Event.element(event).src = image.substring(0, image.lastIndexOf('.')) + "-over.png";
    	}
    }
     
    function resetImage(event) {
    	Event.stop(event);
    	var image = Event.element(event).src;
     
    	var newImage = new Image();
    	newImage.src = image.substring(0, image.lastIndexOf('-')) + ".png";
     
    	if(newImage.complete) {	
    		Event.element(event).src = image.substring(0, image.lastIndexOf('-')) + ".png";
    	}
    }
     
    function chargerImages() {
    	var images = document.getElementsByClassName('aimage');
     
    	var length = images.length;
     
    	for(var i = 0; i < length; i++) {		
    		Event.observe(images[i], 'mouseover', changerImage);
    		Event.observe(images[i], 'mouseout', resetImage);			
    	}
    }
     
    Event.observe(window, 'load', chargerImages, false);
    Mon problème, c'est que si l'image 'over' n'a pas été chargé et que je survole un lien-image, le navigateur me remplace l'image par le texte contenu dans l'attribut 'alt'. Ainsi, j'ai rajouté la condition sur la valeur de newImage.complete mais cela semble ne pas fonctionner. Étrange car sur un autre site, le même script fonctionne.

    Voyez-vous une erreur évidente que mes yeux de débutant auraient loupé ? Connaissez-vous un meilleur moyen de réaliser ce que je veux ?

    Merci à vous

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Salut, j'avais eu le même problème que toi , en utilisant la méthode "complete" essaye en utilisant la méthode "onload".
    Sinon solution plus "propre" pour l'utilisateur qui navigue sur le site, utilise un préload de tes images

    Coordialement
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    un setTimeout mais pas esthétique ...

    sinon il faut le temps deprechargement de l'image ...
    comme le dit chom faut preloader au départ ...
    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

    Venez sur le Chat de Développez !

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Sinon solution plus "propre" pour l'utilisateur qui navigue sur le site, utilise un préload de tes images
    Citation Envoyé par SpaceFrog Voir le message
    comme le dit chom faut preloader au départ ...
    Hmmmm j'avais entendu parler de cette méthode mais je n'ai jamais vu de script. Je vais chercher, si jamais vous pouvez me donner plus de précision, ce serait sympa

    Merci à vous.

  5. #5
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Alors plusieurs solution possible , la première et selon moi la plus propre, l'utilisation de css , plutot que de changer la source d'une image utilise des liens tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <style type="text/css">
    A.rollover {
         width: taille de ton image;
         height: taille de ton image;
         background: url(urlDeTonImage);
    }
    A.rollover:hover {
         background: url(urlDeTonImageSurvoll);
    }
    </style>
    puis pour gèrer le préload, une petite astuce dans ta page html au tout début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="urlDeTonImageSurvoll" alt="" style="display:none;" />
    ce qui aura pour effet de charger l'image dans le cache du navigateur , mais de ne pas l'afficher dans al page ...
    et enfin le lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a class="rollover" href="http://www.developpez.net/"></a>
    sinon en javascript, a placer au tout début de ton script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var monImage = new Image();
    monImage.src = "urlDeTonImageSurvoll";
    ce qui aura pour effet de lancer le chargement de l'image au début du chargement de la page ...

    En espérant t'avoir aidé, bonne journée
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  6. #6
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Merci je vais vite essayer ça

  7. #7
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Tout à l'air de fonctionner pour le moment, les images ne sont plus remplacées par le texte alt. Voici le code final (j'utilise la libraire Prototype pour la gestion des évenements) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    function changerImage(event) {
    	Event.stop(event);
    	var image = Event.element(event).src;
     
    	var newImage = new Image();
    	newImage.src = image.substring(0, image.lastIndexOf('.')) + "-over.png";
     
    	if(newImage.complete) {	
    		Event.element(event).src = image.substring(0, image.lastIndexOf('.')) + "-over.png";
    	}
    }
     
    function resetImage(event) {
    	Event.stop(event);
    	var image = Event.element(event).src;
     
    	var newImage = new Image();
    	newImage.src = image.substring(0, image.lastIndexOf('-')) + ".png";
     
    	if(newImage.complete) {	
    		Event.element(event).src = image.substring(0, image.lastIndexOf('-')) + ".png";
    	}
    }
     
    function chargerImages() {
    	var images = document.getElementsByClassName('aimage');
     
    	var length = images.length;
     
    	for(var i = 0; i < length; i++) {	
    		var newImage = new Image();
    		newImage.src = images[i].src.substring(0, images[i].src.lastIndexOf('.')) + "-over.png";		
    	}
    }
     
    function chargerEvenements() {
    	var images = document.getElementsByClassName('aimage');
     
    	var length = images.length;
     
    	for(var i = 0; i < length; i++) {		
    		Event.observe(images[i], 'mouseover', changerImage);
    		Event.observe(images[i], 'mouseout', resetImage);	
    	}
    }
     
    Event.observe(window, 'load', chargerImages, false);
    Event.observe(window, 'load', chargerEvenements, false);
    J'ai séparé le chargement des images et l'ajout des évenements, sinon cela ne fonctionnait toujours pas. Merci à vous , j'espère ne plus revoir ces textes alt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Changement dynamique de l'image de fond d'une balise <TD>
    Par Delphi-ne dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/02/2007, 19h40
  2. [IMAGE] changement d'image lors d'un passage de souris
    Par gailup dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 02/06/2006, 10h18
  3. changement dynamique d'image en swing
    Par boudou dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/04/2006, 12h05
  4. Problème de chargement d'image dynamique sous firefox
    Par Tmex dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 08/03/2006, 10h24
  5. [MX2004] redimensionner une image lors du chargement
    Par ouinouin dans le forum Flash
    Réponses: 8
    Dernier message: 18/02/2004, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo