Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction de callback

Comment utiliser this ?

Sujet résolu
    11 janvier 2009 à 21:07:51

    Bonsoir à tous.

    Moi qui ne suit pas beaucoup habitué à utiliser ça en JS, je galère un peu...

    Voici d'abord le code :

    soundManager.onload = function() {
      soundManager.createSound({
        id: 'dslz',
        url: '04 - Chut.mp3',
    	onplay : function() { document.getElementById("barre").style.width = "0px";
    	document.getElementById("pct").innerHTML = "0%"; },
    	whileloading: function() {
    		act_b = parseInt(this.bytesLoaded);
    		tot_b = parseInt(this.bytesTotal);
    		pourcentage_load = act_b/tot_b;
    		largeur = pourcentage_load * 300;
    		document.getElementById("barre").style.width = largeur + "px";
    		document.getElementById("pct").innerHTML = parseInt(pourcentage_load*100)+"%";
    	}
      });
    }
    


    Comment faire pour rendre la fonction de callback du whileloading générale ? (afin de pouvoir utiliser la même pour tous les sons créés... Je sais pas comment envoyer le "this" à la fonction... )

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      12 janvier 2009 à 21:34:46

      this c'est l'objet parent dans ce cas là, t'as essayé de mettre le code tel quel dans une fonction externe?
      • Partager sur Facebook
      • Partager sur Twitter
        12 janvier 2009 à 21:45:27

        esseil sa
        function whileloading(Obj)
        {
        	act_b = parseInt(Obj.bytesLoaded);
        	tot_b = parseInt(Obj.bytesTotal);
        	pourcentage_load = act_b/tot_b;
        	largeur = pourcentage_load * 300;
        	document.getElementById("barre").style.width = largeur + "px";
        	document.getElementById("pct").innerHTML = parseInt(pourcentage_load*100)+"%";
        }
        
        
        soundManager.onload = function()
        {
          soundManager.createSound(
          {
            id: 'dslz',
            url: '04 - Chut.mp3',
        	onplay : function() { document.getElementById("barre").style.width = "0px";
        	document.getElementById("pct").innerHTML = "0%"; },
        	whileloading: function(){ whileloading(this); }
          });
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          12 janvier 2009 à 21:51:48

          normalement t'as pas besoin d'une fonction anonyme. Garde tes this, renomme ta fonction, enlève le paramètre et pouf:

          whileloading: callback

          devrait suffire (et donner le meme nom aux fonctions c'est vraiment pas une bonne idée… )


          ( edit ) et pour spécifier un contexte d'execution à une fonction, il faut utiliser .apply() ou .call() pas une fonction anonyme.
          • Partager sur Facebook
          • Partager sur Twitter
            12 janvier 2009 à 21:54:29

            Comme ça nod_ ?
            function callback() {
            	act_b = parseInt(this.bytesLoaded);
            	tot_b = parseInt(this.bytesTotal);
            	pourcentage_load = act_b/tot_b;
            	largeur = pourcentage_load * 80;
            	document.getElementById("barre").style.width = largeur + "px";
            	document.getElementById("pct").innerHTML = parseInt(pourcentage_load*100)+"%";
            }
            soundManager.onload = function()
            {
              soundManager.createSound(
              {
                id: 'dslz',
                url: 'dslz/04 - Chut.mp3',
            	onplay : function() { document.getElementById("barre").style.width = "0px";
            	document.getElementById("pct").innerHTML = "0%"; },
            	whileloading: function(){ callback; }
              });
            }
            


            Ca marche pas... ? T'es sûr que this reste le même objet dans la fonction appelée ?

            Par contre, la solution d'anihilus fonctionne en effet. Merci. :)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              12 janvier 2009 à 21:56:25

              na comme exactement comme je l'ai écrit

              whileloading: callback

              (sans fonction() ni rien)


              • Partager sur Facebook
              • Partager sur Twitter
                12 janvier 2009 à 22:14:11

                Oups ! Exact.

                Ca marche ! :) Trop bien.

                Merci à vous deux. :D
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  12 janvier 2009 à 23:29:10

                  oh yeah! La difference entre du code qui marche et du code sexy qui marche.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Fonction de callback

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown