Воспроизвести аудиофайл в Javascript - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь воспроизвести аудиофайл в формате js.Что я делаю неправильно?Скрипт автоматически останавливается после некоторых событий, который работает на 100%, теперь все, что я хочу сделать, это добавить звук после его остановки

Вот код в:

function stop() {
    stop_flag = true;
    var audio = new Audio('play.mp3');
    audio.play();
}

Вотполная script.js функция находится внизу.

chrome.runtime.onMessage.addListener(function(message) {
    if (message.action == "init") {
        init(message.options.divider, message.options.delay, message.options.maxLosses);
    }

    if (message.action == "stop") {
        stop();
    }
});

var stop_flag;

function init(divider, delay, maxLosses) {

    var $table = $('table.dice_table').last();
    var lastBetNumber;
    var lastBetValue;
    var lastProfit;
    var losses = 0;

    stop_flag = false;

    loop_start();

    function loop_start() {

        lastBetNumber = getLastBetNumber();

        var betValue = (getCurrentBalance() / divider).toFixed(9);

        //var betValue = (getCurrentBalance() / divider);

        lastBetValue = betValue;

        $("input.bet").val(betValue);

        play();

        setTimeout(loop, delay);

    }

    function loop() {

        if (stop_flag)
            return;

        waitForTableChange()
            .then(roll)
            .catch(loop_start);

        function roll() {
            //only if the last bet has changed \/

            lastBetNumber = getLastBetNumber();

            lastProfit = $table.children('tbody').children('tr').first().children('td').last().text()[0];

            changeBet();

            if (losses >= maxLosses)
                return;

            play();

            setTimeout(loop, delay);
        }

    }

    function waitForTableChange() {
        return new Promise(function(resolve, reject) {

            var n = 0;

            attempt();

            function attempt() {
                n++;

                if (n >= 100) {
                    reject();
                    return;
                }

                if (getLastBetNumber() == lastBetNumber) {
                    setTimeout(attempt, 100);
                    return;
                }

                resolve();
            }
        });
    }

    function changeBet() {

        var newBetValue;

        if (lastProfit == "-") {
            losses++;
            newBetValue = lastBetValue * 2;
        } else {
            losses = 0;
            newBetValue = (getCurrentBalance() / divider).toFixed(9);
        }

        lastBetValue = newBetValue;

        $("input.bet").val(newBetValue);

    }

    function play() {
        $('input.clDicePlay').first()[0].click();
    }

    function getLastBetNumber() {
        return $table.children('tbody').children('tr').first().children('td').first().text();
    }

    function getCurrentBalance() {
        return $('.dice_select .chosen-single span').text().split('- ')[1].split(' ')[0];
    }

}

function stop() {
    var audio = new Audio('play.mp3');
    stop_flag = true;
audio.play();
}

1 Ответ

0 голосов
/ 30 сентября 2018

Проблема в том, что вы устанавливаете audio в функции stop(), которая делает ее локальной для этой функции.После выполнения функции все локальные var s уничтожаются.Вы должны использовать глобальную область видимости, чтобы сохранить объект живым.

Например:

// set 'audio' in the global scope
var audio = new Audio('/path/to/default.mp3');

// create a play / pause button
function playPause(e) {
    // NOTE: audio is from the gloabl scope
    if (this.textContent == 'Play') {
        audio.play();
        this.textContent = 'Pause';
    } else {
        audio.pause();
        this.textContent = 'Play';
    }
}

window.onload = function() {
    var a = document.getElementById('func');
    a.addEventListener('click',playPause,false);
}
<button id="func">Play</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...