Есть ли способ вернуть логическое значение через функцию setInterval ()? - PullRequest
0 голосов
/ 24 апреля 2019

Я работаю над проектом видеоплеера и использую videojs, а также videojs-ima для рекламных роликов.

Я наконец-то нашел способ узнать, есть реклама или нет; однако я пытаюсь вернуть логическое значение true или false, чтобы указать, когда запускать и выполнять определенный блок кода.

Вот мой код, в настоящее время он не работает так, как его предназначение.


if (navigator.userAgent.match(/iPhone/i) ||
    navigator.userAgent.match(/iPad/i) ||
    navigator.userAgent.match(/Android/i)) {

    let checkAd = document.querySelectorAll('.ima-ad-container');

    let checkAdLoop = setInterval(() => {
        for (let i=0; i < checkAd.length; i++) {
            if (checkAd[i].style.display == 'none') {
                console.log('Ad is NOT playing.');
                return false;
            } else {
                console.log('Ad is playing.');
                return true;
                // do nothing
            }
        }
    }, 1000);
    player.on('touchend', () => {
        if (player.paused() && checkAdLoop() == false) {
            player.play();
        } else if (player.currentTime > 0 && checkAdLoop() == false) {
            player.pause();
        }
    });
    $('.vjs-icon-placeholder').on('touchend', () => {
        if (player.paused() && checkAdLoop() == false) {
            player.play();
        } else if (player.currentTime > 0 && checkAdLoop() == false) {
            player.pause();
        }
    });
}

Я был бы рад, если бы кто-то мог помочь мне понять и объяснить мне, почему это не работает. Как я могу исправить это?

Я знаю, что я близко. Заранее спасибо!

1 Ответ

1 голос
/ 24 апреля 2019

Это была классическая проблема XY.

Попытка решить проблему, которая не была действительно связана с общей картиной.

Вот код, который работает, и как я по-другому это сделал.

if (navigator.userAgent.match(/iPhone/i) ||
    navigator.userAgent.match(/iPad/i) ||
    navigator.userAgent.match(/Android/i)) {

    let checkAd = $('.ima-ad-container');

    player.on('touchend', () => {
        if (checkAd.css('display') != 'none') {
            console.log('Ad is playing.');
            // do nothing
        } else if (checkAd.css('display') == 'none') {
            console.log('Ad is NOT playing.');

            if (player.paused()) {
                player.play();
            } else {
                player.pause();
            }
        }
    });
    $('.vjs-icon-placeholder').on('touchend', () => {
        if (checkAd.css('display') != 'none') {
            console.log('Ad is playing.');
            // do nothing

        } else if (checkAd.css('display') == 'none') {
            console.log('Ad is NOT playing.');

            if (player.paused()) {
                player.play();
            } else {
                player.pause();
            }
        }
    });
}
...