- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 requestAnimationFrame
创建了一个动画。在 Windows Chrome 和 IE 中运行良好; Safari(已测试 Safari 6 和 7)中断。事实证明,rAF 得到的是 DOMHighResTimestamp
而不是 Date
时间戳。这一切都很好,而且是我所期望的,因为它现在是规范的一部分。但是,据我所知,无法获取当前的 DOMHighResTimestamp
(即 window.performance
不可用,即使有前缀)。因此,如果我将开始时间创建为 Date
时间戳,当我尝试在 rAF 回调(非常小的负数)中确定进度时,它的行为完全错误。
如果你看this Safari 上的 JSBin,它根本不会动画。
在this JBin,我更改为“跳过”第一帧(其中 time
参数为 undefined
),以便设置 startTime
到下一帧的 time
参数。似乎可行,但跳过一帧似乎有点糟糕。
鉴于缺少 window.performance
,是否有一些方法可以在 Safari 中获取当前的 DOMHighResTimestamp
?或者,强制 rAF 进入某种强制其获取日期时间戳的旧模式?
有谁知道为什么 Safari 会出现这种不一致的情况,它以一种您无法通过任何其他方式获得的格式提供参数?
最佳答案
Performance.now() 目前只是一个建议。 https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()我只能假设它正式发布只是时间问题,看看除了 Safari 之外的每个人都是如何内置它的。
除此之外,利用这一优势。由于您知道 requestAnimationFrame 会返回一个 DOMHighResTimestamp,因此请将其用于您的计时。
Game.start = function(timestamp){
if(timestamp){
this.time = timestamp;
requestAnimationFrame(Game.loop);
}else{
requestAnimationFrame(Game.start);
}
}
Game.loop = function(timestamp){
Game.tick(timestamp);
... your code
requestAnimationFrame(Game.loop);
}
Game.tick = function(timestamp) {
this.delta = timestamp - this.time;
this.time = timestamp;
};
我在这里所做的是调用 Game.start 来开始循环(我遇到过时间戳未定义的情况,所以我们会尝试直到得到有效的东西)。一旦我们得到了我们的基准时间,并且由于 RAF 将返回一个时间戳,我们的 tick 函数永远不必调用 Date.now 或 performance.now,只要我们将 requestAnimationFrame 返回的时间戳传递给它即可。
关于javascript - Safari 和 requestAnimationFrame 获取 DOMHighResTimestamp; window.performance 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298569/
假设我们有一个功能/模块,可以增强网站。所以这并不是真正必要的,它使用 requestAnimationFrame,即 not supported in older browsers比如IE8/9。我
“requestAnimationFrame”方法在以下示例中不起作用。控制台不显示任何错误消息。那么这段代码的错误是什么?HTML:
我有以下 JavaScript: function animate() { // call other function offset += 3; if (offset > 15) offset =
我有一些基本脚本可以将文本左右滚动,我尝试将其从 timeout 转换为 requestAnimationFrame,但是,我无法制作它有效。 function slideHorizontal(e,
我遇到了这个奇怪的问题,我递增了 1,但是,弹出 javascript 窗口时出现的增量显示我已递增了 9 或 13,这两者都来自于我是否分别增加 1 或 -1。这是怎么回事? 这是 requestA
我试图了解有关 requestAnimationFrame 的一件事。 在下面的示例代码中,我运行了 60 次,这应该与您通常获得的典型每秒 60 帧相匹配,因此它应该持续 1 秒。然而我故意通过调用
有人可以分享一下在动画循环中应该在哪里进行 RequestAnimationFrame 调用吗?它应该在循环的开头还是循环的结尾?我已经多次看到它在循环开始时使用它,但是位于循环底部不是更好吗?这样在
我尝试为很多 svg 路径设置动画,但功能不起作用 错误: Uncaught RangeError: Maximum call stack size exceeded function dashOf
我有一张滑动图片沿着屏幕缓慢移动。一旦它们离开屏幕,它们就会背靠背靠在丝带上。因此,当您在网页上时一切正常,但当您离开并且其中一张图像超出范围时。它会被放回错误的地方。我认为这可能与 requestA
我在使用 requestAnimationFrame() 时遇到了性能问题。 考虑以下代码。这是一个简单的循环,每次时间增量大于 20 毫秒时,都会打印自上一帧以来的时间。 const glob_ti
根据我的阅读,requestAnimationFrame 可以判断浏览器何时失去焦点。发生这种情况时是否会触发某种事件?我正在寻找暂停和恢复与 requestAnimationFrame 相关的代码。
let pf = document.querySelectorAll('.pf'); for (let i of pf) { Object.assign(i.style, { left:
我最近看了 Jake Archibald 的演讲。他在演讲中举了一个例子,他说使用 requestAnimationFrame 两次来延迟应用 CSS 样式来执行 CSS 动画。 参见https://
我正在使用 requestAnimationFrame 为视频流设置动画,我知道请求动画在后台不起作用,所以有什么方法可以让它在后台运行。 我知道我们也可以使用 setInterval 或 setTi
我是编程新手,面对这个功能: function update(time = 0) { console.log(time); requestAnimationFrame(update);
我正在尝试使用 JavaScript 和 requestAnimationFrame 制作一个简单的计时器(从 0 开始计数)。单击某些内容时,我想从 0 开始计时。目前我的代码在单击按钮时显示计时器
如果我有以下代码: window.requestAnimationFrame(animation1); //animation1 takes more than 16.67ms, misses the
我有一个带有 requesetAnimationFrame 的动画,当我重播它时,它变得越来越快,直到它变得不可见。 function tirer(){ var missile=documen
我有一个问题: document.querySelector('div').addEventListener('mousedown', function(){ hello = true
我有一种情况,我想在 1 秒内将 600px 宽的 div 的宽度设置为 0px。为此,我可以使用 requestAnimationFrame()。但我真的不能 100% 确定动画是否需要 1 秒。
我是一名优秀的程序员,十分优秀!