【问题标题】:Is there a way to return a boolean value through setInterval() function?有没有办法通过 setInterval() 函数返回一个布尔值?
【发布时间】:2019-04-24 17:56:24
【问题描述】:

我正在开发一个视频播放器项目,我正在使用 videojs 和 videojs-ima 进行广告前贴片广告。

我终于找到了一种方法来判断是否存在广告;但是,我试图返回一个布尔值 truefalse 以判断何时运行和执行某个代码块。

这是我的代码,它目前无法正常工作。


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();
        }
    });
}

如果有人可以帮助我理解并可以向我解释为什么这不起作用,我会很高兴。我该如何解决这个问题?

我知道我很接近。提前致谢!

【问题讨论】:

  • 返回值必须某处。处理程序的返回值将分配到哪里?它只是不那样工作。间隔函数的返回值被忽略。
  • 为什么要返回一个值来决定是否运行某些代码而不是实际运行代码?
  • @VLAZ 好吧,我实际上已经尝试过只运行代码。问题是,我很确定它与setInternval() 功能有关,是我的活动要进行两次。我可以通过点击播放器来播放和暂停视频;但是,它并不流畅,我通常必须在视频播放之前至少点击两次,或者暂停。
  • 这听起来像是一个XY问题,那么

标签: javascript jquery video.js google-ima


【解决方案1】:

这是一个经典的 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();
            }
        }
    });
}

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2018-08-11
    • 2013-09-15
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多