在Viewport中启动/暂停MovieClip中的计时器

时间:2015-03-04 11:26:14

标签: html actionscript-3 flash

有没有办法在我的flash MovieClip中启动计时器,当它在HTML页面的视口中当前可见但不使用Javascript + ExternalInterface?也许是一个事件或其他技巧?

我想在发生这种情况时启动/停止计时器。

2 个答案:

答案 0 :(得分:1)

与您already discovered一样,ThrottleEvent会告诉您何时支持Flash Player受限制,包括滚动屏幕和浏览器标签切换。

除此之外,您还可以使用Flash中的JavaScript和回调手动检测Flash对象是否可见。例如:

首先,在SWF中设置回调以暂停和恢复计时器:

var timer:Timer = new Timer(1000);

ExternalInterface.addCallback("pause", timer.pause);
ExternalInterface.addCallback("resume", timer.resume);

接下来,在HTML中,跟踪Flash对象在HTML视口中的位置,并在发生更改时调用SWF。这是一个很好的例子:How to tell if a DOM element is visible in the current viewport?

您的处理程序只需要跟踪Flash对象可见性何时发生变化,并在执行时调用SWF:

function isElementInViewport (element) {

    //special bonus for those using jQuery
    if (typeof jQuery === "function" && el instanceof jQuery) {
        el = el[0];
    }

    var rect = el.getBoundingClientRect();

    return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
        rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
    );
}

$(window).on('DOMContentLoaded load resize scroll', handler); 

var flashIsVisible = false;
function handler(e){
    var flash = document.getElementById("myFlash");
    var isVisible = isElementInViewport(flash);
    if(isVisible != flashIsVisible){
        flashIsVisible = isVisible;
        isVisible ? flash.resume() : flash.pause();
    }
}

答案 1 :(得分:0)

您可以尝试使用Event.ACTIVATEEvent.DEACTIVATE,但这样做只会在您的Flash文件获得或失去焦点时触发事件。也许这就是你的答案。