【发布时间】:2017-03-17 06:50:57
【问题描述】:
如果将某个函数传递给requestAnimationFrame(),该函数如何检测到它是在动画帧内被调用的?
f.e.
function someFunction() {
if (/* What goes here? */) {
console.log('Inside animation frame.')
}
else {
console.log('Not inside animation frame.')
}
}
// The following lines should not be modified for the answer.
someFunction() // logs "Not inside animation frame."
requestAnimationFrame(someFunction) // eventually logs "Inside animation frame."
最后两行不应修改。我很想知道我是否可以在不需要用户记住以两种不同方式使用该功能的情况下检测这种情况。最终用户应该像平常一样使用函数,而不知道我的函数检测到了用例。
【问题讨论】:
-
你总是可以从调用站点传递一些东西:
requestAnimationFrame(function(){someFunction(true)})vssomeFunction(false)。 -
确实如此,但如果我的功能交给其他人使用,不保证他们会这样做。或者,其他人甚至可能不知道他们正在间接调用此函数。
-
ES6 默认参数可能会有所帮助:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@spender 这可能是迄今为止最好的答案,但仍不能确定 100%。例如,如果我们定义
function someFunction(time = false) {},那么time将在帧内时为时间戳,false在帧外(除非用户为时间戳传递手动值)。
标签: javascript requestanimationframe