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 :

Réalisation d'un loader pour précharger les images avec canvas [API HTML5]


Sujet :

JavaScript

  1. #1
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut Réalisation d'un loader pour précharger les images avec canvas
    Bonjour, je souhaite à précharger les images de mon canvas avant son utilisation.

    J'ai créer la classe suivante pour réaliser cette tache :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    /**
    * Simple Loader class, that load resources before application start.
    * This is a singleton class.
    */
    var SimpleLoader = (function(){
    	var constructeur = function(){
    		var resources = new Array();
    		var loaded = 0;
    		var id = null;
    		var complete = false;
     
    		this.addResources = function(resource){
    			if( resource instanceof Picture || resource instanceof Video || resource instanceof Sound){
    				resources.push(resource);
    			}
    		};
     
    		this.getLoaded = function(){
    			return loaded;
    		};
     
    		this.load = function(){
    			id = setInterval(draw, 1000);
    			for(var i = 0; i < resources.length; i++){
    				var resource = resources[i];
    				if(resource instanceof Picture){
    					resource.img = new Image();
    					resource.img.src = resource.src;
    					resource.img.onload = function(){
    						loaded++;
    					};
    				} else if(resource instanceof Video){
    					/* Load video */
    				} else if(resource instanceof Sound){
    					/* Load sound */
    				}
    			}
    		};
     
    		var draw = function(){
    			if(loaded < resources.length){
    				console.log("Chargement en cours :" +  loaded + " / " + resources.length);
    			} else {
    				alert("Chargement terminé");
    				complete = true;
    				clearInterval(id);
    			}
    		};
     
    		this.isComplete = function(){
    			return complete;
    		};
    	}
        var instance = null;
    	return new function() {
    		this.getInstance = function(){
    			if(instance == null){
    				instance = new constructeur();
    				instance.constructeur = null;
    			}
     
    			return instance;
    		}
    	}
     
     
    })();
    La classe est un singleton. Les ressources sont ajoutés lors de l'instanciation d'une image.

    Enfin avant la boucle du jeu , je lance :

    Seulement, le navigateur freeze pendant quelque instant , puis affiche Chargement terminé directement au lieu d'afficher le nombre de ressource chargés au fur et à mesure.

    Le setInterval est la pour checker périodiquement la valeur de loaded.
    merci d'avance.

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Comme ça je pense que Chrome n'a pas le temps de redessiner l'écran car l'intervalle est trop court. Du coup, il attend. T'as essayé avec un intervalle plus long ?
    Mais pourquoi se servir de ça au fait ? Appelle le 'draw' à la fin du chargement et met par défaut "Chargement en cours" à l'initialisation ?

  3. #3
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut
    J'aimerai bien pouvoir afficher la progression du chargement. Dans le cas ou il y a beaucoup de ressource à charger.

    Comme ici par exemple :

    http://www.kevs3d.co.uk/dev/arena5/

    Seulement , je n'arrive pas à voir ou dans son code, se passe le preload

  4. #4
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut
    bon , il semblerai que comme par miracle, j'ai réussi à obtenir quelque chose.
    En tout cas, j'ai bien la console qui affiche toute les valeurs une à une.

    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
    this.load = function(callback){
    	console.log("Loading ...");
    	var i = 0;
     
    	//id = setInterval(draw, 200);
    	var loadResource = function(i){
    		var resource = resources[i];
    		if(resource instanceof Picture){
    			resource.img = new Image();
    			resource.img.src = resource.src;
    			resource.img.onload = function(){
    				loaded++;
    				if(loaded == resources.length){
    					console.log("loading complete");
    					clearTimeout(id);
    					callback;
    				} else {
    					console.log("chargement en cours..." + loaded + " / "+ resources.length);
    					id = setTimeout(function() {loadResource(i+1)}, 0);
    				}
    			};
    		} else if(resource instanceof Video){
    			/* Load video */
    		} else if(resource instanceof Sound){
    			/* Load sound */
    		}
    	}
    	loadResource(i);
    };
    par contre le callback n'est pas executé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    loader.load(function(){
    	for(var i = 0; i < layers.length; i++){
    		console.log("layer update");
    		layers[i].update();
    	}
    });
    Edit: manquait les () derrière le callback. tout fonctionne parfaitement

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

Discussions similaires

  1. [TinyMCE] Chemin pour afficher les images avec tinybrowser
    Par Loulo8407 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 19/05/2010, 11h23
  2. Quelle méthode utiliser pour traiter les images
    Par babozfr dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 02/03/2007, 15h40
  3. Réponses: 12
    Dernier message: 25/06/2006, 23h24
  4. [MySQL] Boucle pour récuperer les images de la base
    Par tchoukapi dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/11/2005, 16h04
  5. [techno] Précharger les images d'un site pour ou contre?
    Par Death83 dans le forum Webdesign & Ergonomie
    Réponses: 19
    Dernier message: 26/10/2005, 10h21

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