【发布时间】:2016-02-09 19:01:21
【问题描述】:
当用户将焦点切换到另一个浏览器选项卡时,我正在尝试使用页面可见性 api 来暂停画布动画:
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") { // Opera 12.10 & Firefox 18 & later support
hidden = "hidden";
visibilityChange = "visibilitychange";
}
function drawStuff () {
//draws & rotates stuff on canvas
}
function handleVisibilityChange() {
if (document[hidden]) {
clearInterval(drawPic);
} else {
var drawPic = setInterval(drawStuff, 60);
}
}
handleVisibilityChange();
document.addEventListener("visibilitychange", handleVisibilityChange, false);
我希望动画能准确地从中断的地方继续,但由于某种原因,每次我离开选项卡并返回到我的页面时,setInterval 都不会清除,并且绘图速度会加快,就好像有多个setIntervals 被调用。如果您多次离开并返回选项卡,动画会加速到荒谬的比例。
这里发生了什么?为什么在 handleVisibilityChange 函数中没有清除间隔?
编辑:移动 var 声明修复它,谢谢。
编辑 2:在 document[hidden] 的代码中添加以供将来参考(如 Suing & Tushar 所述)。
【问题讨论】:
-
在函数外声明
var drawPic;。并从else中删除var。假设document[hidden]是正确的。 -
这是因为
drawPic是一个局部变量,当你尝试清除它时,它会返回 undefined -
试试
document['hidden']
标签: javascript html canvas