javascript - How to stop the infinite loop in the play/pause control function -


in music player have function controls audio object , when play/pause button clicked decides either pause sound or play it. if other audio playing when button clicked, pauses them , play sound corresponding click button.

this function:

  function manageaudio() {     if (audio.paused) {        //play after 150ms       settimeout(function() {         audio.play();       }, 150);        $('.playbutton.playing').click();        $(thisobj).addclass("bekhon");       $(".smusicplyaer").removeclass("nakhon ");     } else {       audio.pause();        $(thisobj).addclass("nakhon");       $(".smusicplyaer").removeclass("bekhon");     }   } 

here full demo have look:

$.fn.musicplayer = function(options) {    var settings = $.extend({      // these defaults      title: "",      track_url: "",      load_playlist: ""    }, options);    var audio, thisobj, playpausebtn;    audio = new audio();    thisobj = this;    playpausebtn = $(".playbutton", thisobj);      //statuses evnts    $(audio).on("playing", function() {      toggleplying(playpausebtn, true);      $(playpausebtn).addclass("pause");    });    $(audio).on("pause", function() {      toggleplying(playpausebtn, false);      $(playpausebtn).removeclass("pause");    });        thisobj.each(function() {      audio.src = settings.track_url;      $(".title", thisobj).text(settings.title);        if (settings.load_playlist == "true") {        $(thisobj).css("height", "140px");        $(thisobj).append("<div class='playlist'></div>");        $(".playlist", thisobj).append("<div class='row' data-src='https://p.scdn.co/mp3-preview/c92cc644b1eb5094ce65cf561c41b0c6d9f3faaa'>music 1</div>");        $(".playlist", thisobj).append("<div class='row' data-src='https://p.scdn.co/mp3-preview/dc73c2b8aa08c7b5ac2c72813326fbd6aa65787b'>music 2</div>");        $(".playlist", thisobj).append("<div class='row' data-src='https://p.scdn.co/mp3-preview/b2da3e7ee2834c24fbf5a0927e59d34cc618e30e'>music 3</div>");      }    });        $(playpausebtn, thisobj).on("click tap", function() {      manageaudio();    });      $(".playlist > .row", thisobj).on("click tap", function() {      audio.src = $(this).attr("data-src");      manageaudio();    });        function manageaudio() {      if (audio.paused) {          //play after 150ms        settimeout(function() {          audio.play();        }, 150);                console.log("print");        $('.playbutton.playing').click();          $(thisobj).addclass("bekhon");        $(".smusicplyaer").removeclass("nakhon ");      } else {        audio.pause();          $(thisobj).addclass("nakhon");        $(".smusicplyaer").removeclass("bekhon");      }    }  }      // utility functions  function toggleplying(aclassname, bool) {    $(aclassname).toggleclass("playing", bool);  }    $("#player1").musicplayer({    title: "title 1",    track_url: "https://rjmediamusic.com/media/mp3/mp3-256/alireza-jj-sijal-nassim-ki-khoobe-ki-bad-(ft-behzad-leito-sami-low-afx).mp3"  });    $("#player2").musicplayer({    title: "title 2",    track_url: "http://myst729.qiniudn.com/within-temptation_pale.mp3",    load_playlist: "true"  });    $("#player3").musicplayer({    title: "title 3",    track_url: "https://p.scdn.co/mp3-preview/657f7141682f667253bf9c3afab5feebccf75105"  });
body {    background: url(http://wallpapercave.com/wp/vkygwei.jpg) no-repeat;    background-size: cover;  }    .smp {    background: rgba(255, 255, 255, 0.5);    color: #000;    width: 400px;    height: 50px;    margin: 10px;  }    .playbutton {    background: url(https://cdn4.iconfinder.com/data/icons/standard-free-icons/139/play01-64.png);    background-size: 30px 30px !important;    width: 30px;    height: 30px;  }    .playbutton.pause {    background: url(https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-pause-48.png);  }    .row {    border: 1px solid black;    margin: 5px 0 5px 0;  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  <div class="smp" id="player1">    <div class="playbutton"></div>    <div class="title"></div>  </div>  <div class="smp" id="player2">    <div class="playbutton"></div>    <div class="title"></div>  </div>  <div class="smp" id="player3">    <div class="playbutton"></div>    <div class="title"></div>  </div>

jsfiddle:

to see error, click on play button in player 2, change track click on track in same playlist. ends uncaught rangeerror: maximum call stack size exceeded(…) error. related $('.playbutton.playing').click();.

any solution fix it?

you have make sure clicking play button outside current playlist.

so instead of doing $('.playbutton.playing').click(); can do:

  var $playing = $('.playbutton.playing');    if ($(thisobj).find($playing).length === 0) {      $playing.click();   } 

this way not clicking again play button in middle box.


Comments

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -