Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
663 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  <audio> jquery problème avec l'event ended

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

<audio> jquery problème avec l'event ended

n°2109507
niko59480
O_o'
Posté le 03-11-2011 à 11:09:47  profilanswer
 

Bonjour à tous,
 
Je rencontre actuellement un problème pour intercepter l'évennement de fin de lecture de ma balise <audio> avec jQuery.
J'ai vu quelques solutions du genre :  

Code :
  1. document.getElementById('player').addEventListener('ended', function(){}, false);


mais le addEventListener me génère une erreur JS...
 
existe-t-il un équivalent fonctionnel avec jQuery?
j'ai essayé :

Code :
  1. $('#player').bind('ended', function(){});


et

Code :
  1. $('#player').live('ended', function(){});


mais en vain...
 
Merci d'avance
 
niko

mood
Publicité
Posté le 03-11-2011 à 11:09:47  profilanswer
 

n°2110119
niko59480
O_o'
Posté le 07-11-2011 à 11:39:48  profilanswer
 

un petit up!
 
j'apporte plus de précision à mon problème au passage :  
 
j'ajoute dorénavant des sources à ma balise audio afin que l'enchainement se fasse tout seul... sauf qu'il ne se fait pas... et le problème lié à cette solution, c'est que dès que l'on ajoute un morceau en lecture, ça recharge la balise et donc le morceau en cours de lecture...
 
le code du player :  

Code :
  1. <div id="lecteur_audio">
  2.             <audio controls autoplay id="player">
  3.                 <source src="" />
  4.             </audio>
  5. </div>


 
ma fonction pour lire un morceau (JS) :  

Code :
  1. $('.play').click(function(){
  2.                     var path=this.nextElementSibling.nextElementSibling.nextElementSibling.innerHTML;
  3.                     if(path.substr(0,6)!='../../'){path='../'+path;}
  4.                     // on distingue le nom du path
  5.                     var _nom=path.substr(path.lastIndexOf('/')+1);
  6.                     var _path=path.substr(0, path.lastIndexOf(_nom));
  7.                     //
  8.                     // création du modèle json, ne sert qu'à l'affichage de la playlist
  9.                     var _media='{"playlist":[{"n":"'+_nom+'", "p":"'+_path+'"}]}';
  10.                     $('#stockage').text(_media);
  11.                     //
  12.                     // rechargement de la playlist pour l'actualiser
  13.                     $('#playlist').load('views/playlist.php');
  14.                     // remise en forme des chemins (gestion d'un problème lié aux espaces)
  15.                     while(_nom.indexOf("___" )>-1){_nom=_nom.replace("___", " " );}
  16.                     while(_path.indexOf("___" )>-1){_path=_path.replace("___", " " );}
  17.                     //
  18.                     // création du player avec chemin vers le média
  19.                     /* ancienne solution
  20.                     var audio = document.createElement('audio');
  21.                     audio.id="player";
  22.                     audio.loop=true;
  23.                     audio.controls=true;
  24.                     audio.autoplay=true;
  25.                     var source=document.createElement('source');
  26.                     console.log(_path+_nom);
  27.                     source.src=_path+_nom;
  28.                     audio.appendChild(source);
  29.                     $('#lecteur_audio').append(audio);
  30.                     */
  31.                     $('#lecteur_audio').html('<audio id="player" controls autoplay><source src="'+_path+_nom+'"></audio>');
  32.                 });


 
et ma fonction pour ajouter un morceau à ma playlist :  

Code :
  1. $('.add').click(function(){
  2.                     var path=this.nextElementSibling.nextElementSibling.innerHTML;
  3.                     if(path.substr(0,6)!='../../'){path='../'+path;}
  4.                     var _nom=path.substr(path.lastIndexOf('/')+1);
  5.                     var _path=path.substr(0, path.lastIndexOf(_nom));
  6.                     // ajouter à l'objet json :
  7.                     // on récupère l'objet actuel si il y en a un
  8.                     var json=$('#stockage').text();
  9.                     var _objet=jQuery.parseJSON(json);
  10.                     if(_objet!=null){
  11.                         var _media='{"playlist":[';
  12.                         var _i=0;
  13.                         while(_i<_objet.playlist.length){
  14.                             _media+='{"n":"'+_objet.playlist[_i].n+'", "p":"'+_objet.playlist[_i].p+'"},';
  15.                             _i++;
  16.                         }
  17.                         _media+='{"n":"'+_nom+'", "p":"'+_path+'"}]}';
  18.                     }
  19.                     //var _media='{"n":"'+_nom+'", "p":"'+path+'"}';
  20.                     $('#stockage').text(_media);
  21.                     $('#playlist').load('views/playlist.php');
  22.                    
  23.                     // ajout du source pour ce titre au lecteur
  24.                     //var _source=document.createElement('source');
  25.                     // remise en forme des chemins
  26.                     while(_nom.indexOf("___" )>-1){_nom=_nom.replace("___", " " );}
  27.                     while(_path.indexOf("___" )>-1){_path=_path.replace("___", " " );}
  28.                     //_source.src=_path+_nom;
  29.                     //$('#player').children().add(_source);
  30.                     $('#player').html($('#player').html()+'<source src="'+_path+_nom+'">');
  31.                 });


 
je n'ai pas d'autres idées en tête pour palier à mon problème donc j'ai vraiment besoin d'un coup de main (sans mauvais jeu de mots) la dessus svp.

n°2110411
gueuledang​e
Smokin chroniı̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̨̨̨̨̨̨c
Posté le 08-11-2011 à 22:06:40  profilanswer
 
n°2110810
niko59480
O_o'
Posté le 10-11-2011 à 16:59:42  profilanswer
 

Salut gueuledange et merci pour ta réponse.
 
j'ai donc réessayé avec ton lien
 
bizarrement, ça fonctionne alors que je n'ai rien changé entre mon premier post et aujourd'hui...
le  

Code :
  1. $('#player').bind('ended', function(){});


fonctionne correctement...
 
merci à toi!

n°2110915
gueuledang​e
Smokin chroniı̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̨̨̨̨̨̨c
Posté le 11-11-2011 à 13:21:18  profilanswer
 

C'est ton navigateur qui avait garder le vieux code en cache ^^
A+


---------------
No fate but what we make
n°2111266
niko59480
O_o'
Posté le 14-11-2011 à 10:47:54  profilanswer
 

je pensais qu'un ctrl+f5 réglait le problème mais apparemment non...

n°2111279
niko59480
O_o'
Posté le 14-11-2011 à 12:03:57  profilanswer
 

j'ai toujours un problème sur l'évènement 'ended' de mon player audio...
j'arrive bien à capter l'évènement mais lorsque j'ai plus de 2 chansons dans ma playlist, ça passe de la première à la dernière chanson...
mon code :  

Code :
  1. $('#player').bind('ended', function(){
  2.    console.log('ended event');
  3.    // ça rentre dedans en fin de lecture, il n'y a plus qu'un seul source donc il faut recharger le player avec les infos pour la chanson d'après
  4.    // on récupère le morceau qui vient de se finir
  5.    var currentSong=$('#player').children()[0].src;
  6.    currentSong='../..'+currentSong.substr(currentSong.indexOf('/musique/'));
  7.    while(currentSong.indexOf("%20" )>-1){
  8.       currentSong=currentSong.replace("%20", "___" );
  9.    }
  10.    // on ressort la playlist en json
  11.    var json=$('#stockage').text();
  12.    var _objet=jQuery.parseJSON(json);
  13.    if(_objet!=null){
  14.       if(_objet.playlist.length>0){
  15.          console.log('sup 0');
  16.          var _i=0;
  17.          var _found='false';
  18.          while(_i<_objet.playlist.length){
  19.             console.log('loop');
  20.             var _song=_objet.playlist[_i].p+_objet.playlist[_i].n;
  21.             if(_found=='true'){
  22.                console.log('chanson suivante');
  23.                while(_song.indexOf("___" )>-1){
  24.                   _song=_song.replace("___", " " );
  25.                }
  26.                $('#lecteur_audio').html('
  27.                   <audio id="player" controls autoplay>
  28.                      <source src="'+_song+'">
  29.                   </audio>'
  30.                );
  31.                //$('#player').children()[0].src=_song; identique à la ligne précédente sauf que la lecture ne se lance pas
  32.                return;
  33.             }
  34.             if(_song==currentSong){
  35.                console.log('found');
  36.                _found='true';
  37.             }
  38.             _i++;
  39.          }
  40.       }
  41.    }
  42. });


 
forme de mon json :  

Code :
  1. {"playlist":[
  2.    {
  3.       "n":"chanson1",
  4.       "p":"pathchanson1"
  5.    },
  6.    {
  7.       "n":"chanson2",
  8.       "p":"pathchanson2"
  9.    },
  10.    {
  11.       "n":"chanson3",
  12.       "p":"pathchanson3"
  13.    },
  14.    {
  15.       "n":"chanson4",
  16.       "p":"pathchanson4"
  17.    }
  18. ]}


 
et ce qui remonte dans ma console :  

Code :
  1. ended event
  2. sup 0
  3. loop
  4. found
  5. loop
  6. chanson suivante
  7. ended event
  8. sup 0
  9. loop
  10. loop
  11. found
  12. loop
  13. chanson suivante
  14. ended event
  15. sup 0
  16. loop
  17. loop
  18. loop
  19. found
  20. loop
  21. chanson suivante
  22. ended event
  23. sup 0
  24. loop
  25. loop
  26. loop
  27. loop
  28. found


 
donc en gros, c'est comme s'il y avait une boucle autour de ma fonction qui s'arrêterait au dernier élément de ma playlist... et la je sèche complètement...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  <audio> jquery problème avec l'event ended

 

Sujets relatifs
Probleme de Compilation (switch) Problème de CSS
probleme aspell : anglais mis de force meme avec set_option(...)Problème de démarrage de Apache Mysql
[resolu] comment récupérer le contenu d'un json avec jquery[RESOLU][c++] probleme de syntaxe dans un héritage
Probleme Java + Telnet + Active DirectoryPython + Qt + OpenCV = problème :/
Création d'un livre d'or en PHP : problème de débutant... 
Plus de sujets relatifs à : <audio> jquery problème avec l'event ended


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR