有没有办法在我的flash MovieClip中启动计时器,当它在HTML页面的视口中当前可见但不使用Javascript + ExternalInterface?也许是一个事件或其他技巧?
我想在发生这种情况时启动/停止计时器。
答案 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.ACTIVATE
或Event.DEACTIVATE
,但这样做只会在您的Flash文件获得或失去焦点时触发事件。也许这就是你的答案。