Как остановить запуск функции с другой функцией через класс Object - PullRequest
0 голосов
/ 28 мая 2019

Я только начал изучать объектно-ориентированный Javascript, и мне нужна помощь, чтобы выяснить, как отменить / остановить выполнение функции через другую функцию.Я строю (на самом деле не строю, просто практикую) class Music с конструктором, содержащим несколько параметров, и в основном я хочу проигрывать и приостанавливать музыку, когда захочу.

Я думал сделать ее немного интересной, еслия мог бы посчитать секунды в момент, когда я проигрываю песню, и если я достигну количества секунд, в течение которых песня длится, чтобы остановить / приостановить счетчик и продолжить воспроизведение позже, когда я остановился.

Проблема, которую яу меня есть, я хочу приостановить счетчик, но кажется, что счетчик продолжает выполняться.

У меня есть две функции в моем объекте класса.Функции play() и pause().Сначала я выполняю функцию play(), а перед тем, как "музыка" заканчивается, я выполняю pause(), который должен остановить счетчик.

Я попытался добавить в конструктор патаметр: this.isPlaying = false и когдаplay() работает this.isPlaying становится true, и если я бегу pause() this.isPlaying снова становится false, останавливает счетчик и дает мне количество секунд, которое он посчитал.

Я получаюсекунд назад, когда я запускаю pause(), но функция play() все еще работает независимо от

class Music {
  constructor(title, uploader, seconds, isPlaying, startTime) {
    this.title = title;
    this.uploader = uploader;
    this.seconds = seconds;
    this.isPlaying = false;
    this.startTime = 0;
  }

  play() {
    if (!this.isPlaying && this.startTime == 0) {
      this.isPlaying = true;
      console.log('The song: ' + this.title + ' Started');
      var startSong = setInterval(() => {
        this.startTime++;
        if (this.startTime == this.seconds) {
          this.isPlaying = false;
          clearInterval(startSong);
          console.log("song ended");
        }
      }, 1000);
    } else {
      console.log(this.startTime);
      return;
    }
  }

  pause() {
    // console.log(this.isPlaying);
    console.log("executed pause");
    this.isPlaying = false;
  }
}

var fstSong = new Music('Stairways to Heaven', 'Pablo Fransisco', 15);
fstSong.play();

Я ищу pause(), чтобы остановить счетчик и установить fstSong.startTime на второечто он остановился на.

1 Ответ

0 голосов
/ 28 мая 2019

Вы можете очистить интервал, объявляя глобальную переменную, которую вы используете для установки интервала и очищая интервал, вызывая функцию паузы

class Music {
  constructor(title, uploader, seconds, isPlaying, startTime) {
    this.title = title;
    this.uploader = uploader;
    this.seconds = seconds;
    this.isPlaying = false;
    this.startTime = 0;
  }

  play() {
    if (!this.isPlaying && this.startTime == 0) {
      this.isPlaying = true;
      console.log('The song: ' + this.title + ' Started');
      //setting a global variable 
      window.startSong = setInterval(() => {
        this.startTime++;
        if (this.startTime == this.seconds) {
          this.isPlaying = false;
          clearInterval(window.startSong);
          console.log("song ended");
        }
      }, 1000);
    } else {
      console.log(this.startTime);
      return;
    }
  }

  pause() {
    // console.log(this.isPlaying);
    console.log("executed pause");
    this.isPlaying = false;
    clearInterval(window.startSong);// clearing the interval on click function
  }
} 


var fstSong = new Music("song title","song uploader", 15);
fstSong.play();

//Calling pause function on click.
fstSong.pause();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...