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 :

Préchargement des images


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ticketman Webdeveloppeur
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ticketman Webdeveloppeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 27
    Points
    27
    Par défaut Préchargement des images
    Salut !

    Oui oui, je sais ! C'est probablement une question bien facile qu'on devrait pouvoir trouver en cherchant un peu... Sauf que je cherche comme un dingue et chaque post que je trouve parle toujours de cas particulier avec des foules de fonction en plus, ce dont je n'ai pas besoin pour le moment...

    Donc, tant pis, je la pose quand même.
    Comment précharger une image ? Parce que j'ai une image de fond qui pèse un peu lourd sur ma page internet et que je ne veux pas la pourrir en réduisant sa qualité ! !
    Sachant qu'après, pour la suite, il faudra que j'en précharge plusieurs !

    Merci !

  2. #2
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    en background image ?
    ça en se preloade pas ...

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Précharger à partir de quand ? Le navigateur ne va pas deviner qu'il doit afficher cette page, avant que visiteur ne lui dise d'y aller.
    Et une fois que le visiteur veut aller sur cette page, il n'y a rien à précharger, il faut charger tout court.

  4. #4
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    On peut faire des preload d'images si celle-ci font l'objet d'une balise src sur la page.
    Celà permet de charger des images en arrière plan avant de les afficher (modification dynamique de src avec js)

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Il existe toutefois l'attribut rel="prefetch" de la balise <link /> (prerender sur Chrome) qui permet d'indiquer que le fichier lié est destiné à être mis en cache pour la (ou les) page(s) suivante(s)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ticketman Webdeveloppeur
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ticketman Webdeveloppeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    On ne peut pas faire en sorte de précharger une image avant de la coller en background image sur une div avec un évènement de type Click, par exemple ?
    Parce que j'ai mis en place un changement de background, qui joue avec quelques images, et j'aimerai les précharger pour éviter les bugs d'affichage du style "image pas encore chargé au moment de l'apparition de la div"...

  7. #7
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    non pas en background image...
    pas à ma connaissance

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Heu... si

    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
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8" />
    	<title>Image de fond</title>
    	<style>
    		#bgImage{
    			height: 600px;
    			border: 2px solid gold;
    			cursor: pointer;
    		}
    	</style>
    </head>
    <body>
    	<div id="bgImage"></div>
    	<div id="log"></div>
    	<script>
    		var bgImage = new Image();
    		bgImage.onload = function(){
    			document.getElementById('log').innerHTML = 'Image chargée, cliquer sur la div pour l\'afficher...';
    			document.getElementById('bgImage').onclick = function(){
    				this.style.backgroundImage = 'url(http://cyberzoide.developpez.com/misc/background13b-1600x1200.jpg)';
    			};
    		};
    		bgImage.src = 'http://cyberzoide.developpez.com/misc/background13b-1600x1200.jpg';
    	</script>
    </body>
    </html>
    Fonctionne correctement avec FF, Chrome, Opera, Safari et IE (enfin, en version 9)

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ticketman Webdeveloppeur
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ticketman Webdeveloppeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Ok...
    Et bien, je vais essayer de mettre çà en application et l'adapter à mes besoins, ça va pas être facile, cela dit... Je marquerai ce post comme résolu si j'y parviens...
    Je vous tiens au jus !

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    C'est rien d'autre que du préchargement d'image parfaitement habituel, sauf que l'Image reste invisible et qu'on utilise son href dans le style background-image au lieu d'une balise <img>.

    Si on sait faire du préchargement d'image, on sait faire ça.

  11. #11
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Oui ... enfin en général une image en background n'est pas affichée de façon différée, a moins qu'elle en soit sur un élément qui n'est pas visible au chargement.
    Du coup je ne vois pas l'interet de faire du preload sur des image en background

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Si j'ai bien compris, il s'agit de pouvoir modifier l'image de fond à un moment donné, parce que sinon, le préchargement n'a vraiment aucun sens...

  13. #13
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    du coup est ce que juste une class specifique par background ne suffit pas ...

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Ticketman Webdeveloppeur
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ticketman Webdeveloppeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Pour répondre à la question de Bovino, oui, mon but est de faire changer d'image de background à un moment spécifique (un changement de rubrique, par exemple). Et le mieux, c'est que les images, qui font une certain poids quand même, puissent apparaître avec un fondu, après s'être chargé. mais je me demandais si précharger ces images pour éviter qu'il aient à le faire au moment où on les appelle dans la page, serait pas une meilleure idée.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Points : 29
    Points
    29
    Par défaut
    Effectivement, tu as juste besoin de faire précharger l'image par le navigateur. Il existe plein de techniques pour faire cela, avec ou sans JavaScript.

    La version 100% JS la plus simple se résume à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Image().src = 'http://tonsite.com/tonimage.jpg';
    La version CSS + HTML la plus simple semble être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <style>
    #preload { background: url(http://tonsite.com/tonimage.jpg) no-repeat -9999px -9999px; }
    </style>
     
    <div id="preload"></div>

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Ticketman Webdeveloppeur
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ticketman Webdeveloppeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 27
    Points
    27
    Par défaut
    Je vois pour déterminer la méthode la plus approprié... Vu que les images sont assez lourdes...
    Je fais des essais et je reviens vers vous !

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Ticketman Webdeveloppeur
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ticketman Webdeveloppeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 27
    Points
    27
    Par défaut ET çà marche paaaaaas !
    Bon, bah, pour le moment, je galère...
    ET pas qu'un peu, pour ainsi dire, j'ai essayé diverses manip avec les quelques bouts de code que vous m'avez filé, et ce na marche pas du tout ! Et j'y ai passé quelques heures, hier, quand même ^^
    Bon, il est possible que j'aie fait carrément n'importe quoi ! Après tout, je débute ! Voici le chef d’œuvre... -_-

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $('#background_page').animate({opacity:0}, 250, function(){	// On rend la page invisible, et on lance le reste de la fonction.
     
    // On charge d'abord l'image et ensuite, on l'insère dans le background
    	var bgImage = new Image();
    	bgImage.onload = function(){
    		$('#background_page').css("background-image", "url(" + bgImage.src + ")");	// On appelle la nouvelle image de background
    	};
    	bgImage.src = adresseImageBackground; // adresseImagebackground est le nom d'une variable qui stocke une adresse générée dynamiquement
    });
    Ce que je veux faire :
    - Rendre la div invisible (çà, c'est bon..)
    - Charger l'image de fond, qui pèse la bagatelle de 180 Ko en moyenne (Oui, c'est du lourd...), et ensuite je le place en background dans ma div #background page.
    - Et après çà, je veux exécuter ces trois instructions afin de compléter l'animation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $('header img').attr("src", adresseImageLogo); // adresseImageLogo contient une adresse d'image générée dynamiquement.
    $('header, #nav_et_log, #zone_contenu, footer').css("backgroundColor", codeCouleur); // codeCouleur contient un code couleur choisi par un switch.
    $('#background_page').animate({opacity:1}, 250); // L'idéal serait que cette instruction soit lancé lorsque tout est fait, mais je veux surtout que l'image de background ne soit pas en train de se charger en même temps (ce qu'il me fait, à ce stade de développement )
    Je suis là, s'il y a des détails qui coincent. Merci à ceux qui m'aideront !


  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Ticketman Webdeveloppeur
    Inscrit en
    Juin 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ticketman Webdeveloppeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 44
    Points : 27
    Points
    27
    Par défaut Souci réglé !
    C'est bon, le bug est résolu !
    En fait, j'ai vraiment fait une ânerie !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $('#background_page').animate({opacity:0}, 250, function(){	// On rend la page invisible, et on lance le reste de la fonction.
     
    // On charge d'abord l'image et ensuite, on l'insère dans le background
    	var bgImage = new Image();
    	bgImage.onload = function(){
    		$('#background_page').css("background-image", "url(" + adresseImageBackground + ")");	// On appelle la nouvelle image de background
    		$('header img').attr("src", adresseImageLogo); // adresseImageLogo contient une adresse d'image générée dynamiquement.
    		$('header, #nav_et_log, #zone_contenu, footer').css("backgroundColor", codeCouleur); // codeCouleur contient un code couleur choisi par un switch.
    		$('#background_page').animate({opacity:1}, 250); // L'idéal serait que cette instruction soit lancé lorsque tout est fait, mais je veux surtout que l'image de background ne soit pas en train de se charger en même temps (ce qu'il me fait, à ce stade de développement )
    	};
    	bgImage.src = adresseImageBackground; // adresseImagebackground est le nom d'une variable qui stocke une adresse générée dynamiquement
    });
    Première chose, mettre bgImage.src dans l'appel pour css était une bourde monumentale. Ca a fichu en l'air la fonction entière de préchargement !

    Et deux, l'adresse générée pour adresseImageBackground était realtive, et il semble que la fonction ne la digère pas. j'ai mis une adresse d'image complète, et ca marche ! Voilà ! Quand aux trois instructions pour l'animation, j'ai tout mis dans la fonction, et ca marche nickel...
    Bon, j'en ai bavé, mais c'est fait !

    Mais c'est pas fini, j'aurai de l'AJAX à pondre, donc il se peut que je passe dans le coin d'ici peu !

    Tchao

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

Discussions similaires

  1. Préchargement des images
    Par zooffy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/04/2007, 10h40
  2. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  3. Interbase 6 et le type des images?
    Par AnestheziE dans le forum InterBase
    Réponses: 6
    Dernier message: 30/10/2003, 10h48
  4. question sur le format des images ..
    Par vbcasimir dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 28/08/2003, 12h08
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

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