- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试保持 60 fps 动画。目前,我收到很多以大约 30~ fps 的速度发生的慢帧峰值,而且我的眼睛很明显会出现断断续续的情况。
重大修改:丢弃旧的过时代码,添加带有解释的新代码
fadeIn: function(ele){
raf = window.requestAnimationFrame(function() {
console.log(ele);
var opacity = 0;
function increase () {
opacity += 0.05;
if (opacity >= 1){
// complete
ele.style.opacity = 1;
return true;
}
ele.style.opacity = opacity;
requestAnimationFrame(increase);
}
increase();
});
},
fadeInElements: function(elements, properties, speed, delay){
var raf;
var ele;
for (i = 0; i < properties.length; i++){
ele = elements[properties[i]];
console.log('outside loop ' + ele);
instance.fadeIn(ele);
}
},
我的新代码在上面。成功了:
ele
),然后调用 fadeIn(ele)
50ms
延迟(每次在新元素上触发 fadeIn()
最佳答案
好消息是它实际上并不是递归——它更像是一个超时。您提供一个绘制框架的函数,浏览器会为您调用它。
这是一个答案,显示了 complete JSFiddle 的摘录.它不会尝试复制您的确切代码,而是尝试解释您需要了解的内容,以便您可以相应地调整您的代码。编写的代码易于理解,所以我相信还有其他方法可以更快地完成它!
这个答案从顶层向下,这意味着我描述了 JSFiddle 源代码的结尾并向后工作。我个人认为这比从细节开始更容易理解。
您需要在某处开始动画。所以 JSFiddle 中的最后一件事是
window.requestAnimationFrame(eachFrame); //start the animation
这将调用一个名为 eachFrame()
的函数何时是下一帧的时间,例如。每秒 60 次的下一个倍数。不过,它只会执行一次。
你需要 eachFrame()
跟踪我们在动画中的位置。
var startTime = -1.0; // -1 = a flag for the first frame.
function eachFrame()
{
// Render this frame ------------------------
if(startTime<0) {
// very first frame (because of the -1.0): save the start time.
startTime = (new Date()).getTime();
render(0.0);
// the parameter to render() is the time within the
// animation.
} else {
// every frame after the first: subtract the saved startTime
// to determine the current time.
render( (new Date()).getTime() - startTime );
}
// Now we're done rendering one frame. ------
//Start the timer to call this function again
//when it's time for the next frame.
window.requestAnimationFrame(eachFrame);
}; //eachFrame
eachFrame()
确定相对于动画开始的当前时间。 getTime()
以毫秒为单位为您提供时间。
另一件事eachFrame()
就是调用window.requestAnimationFrame(eachFrame);
再次。这不是递归。相反,eachFrame()
将完成运行,然后在下一次出现帧时,浏览器将调用 eachFrame()
再次。
您需要的最后一个功能是实际绘制框架!即render(current time)
.假设,例如 head1
和 head2
引用两个要设置动画的标题元素,例如 <h1>
在您的 HTML 中声明的元素。 clamp(x)
函数返回 x
但低于 0,高于 1。
function render(currTime)
{ // *** Put your rendering code here ***
// How opaque should head1 be? Its fade started at currTime=0.
var opacity1 = clamp(currTime/FADE_DURATION);
// over FADE_DURATION ms, opacity goes from 0 to 1
// How opaque should head2 be?
var opacity2 = clamp( (currTime-FADE_SPACING)/FADE_DURATION );
// fades in, but doesn't start doing it until
// FADE_SPACING ms have passed.
// Apply the changes
head1.style.opacity = opacity1;
head2.style.opacity = opacity2;
} //render
在render()
,你根据当前时间计算出不透明度。您不必担心帧之间的延迟,因为 requestAnimationFrame
为我们处理。您可以通过偏移时间来错开转换。在这个例子中,opacity1
取决于 currTime
和 opacity2
取决于 currTime
减去常数 FADE_SPACING
,因此元素 2 的不透明度变化将比元素 1 的不透明度变化晚 FADE_SPACING
开始。女士
JSFiddle已填写所有详细信息。它为两个 <h1>
的不透明度设置动画。元素,每个元素的动画开始之间有一个间距。希望对您有所帮助!
关于javascript - 我应该使用 requestAnimationFrame 淡入多个元素吗?实现60fps的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910634/
我似乎对 git 存储库有权限问题。 当我 pull 入一个不是我的 Linux 用户创建的目录时,我出现了这个错误。 fatal: Unable to create '/home/---/.git/
在 Git 中,您可以将给定目录克隆到给定目录: git clone ssh://gitolite@dev.bipper.com:3687/com/bipper/kids/portal 当我运行我们
目前,如果您在分支 V2 中并执行“git pull origin V3”,它会将 V3 merge 到 V2,甚至不会发出警告或提示。这个选项可以以某种方式被阻止吗?我在这里阅读了所有类似的问题,人
我刚开始使用 Oracle 的 Coherence 缓存,我注意到这一点:如果我在缓存中放入一个 ConcurrentHashMap 对象,当我检索它时,我可以看到它被转换为一个普通的 HashMap
看起来我缺少对 git pull 和 git commit 的基本理解,假设我在分支上工作,而它在我更新时被其他开发人员更新了在本地做我的工作。我应该在发出 git pull 之前提交更改,还是应该执
好的。所以我以为我已经舔过了……但现在…… 我有一个项目,其中包含一个来自 GitHub 的小型库作为子模块。在该 super 项目的原始版本中,子模块按预期工作。 但是,我只是克隆了 super 项
使用 Visual Studio Code 中的内置 Git,我看不到将指定的远程分支 pull 入当前分支的方法。我可以这样做吗? 示例:我正在分支 myBranch 上工作,更改已 merge 到
当我尝试提交或 pull 此错误时 Bus error (core dumped) 发生了! 当我用 gdb 调试它时,(gdb git,run commit -a,where) 结果是: mucul
我对默认 Rails Rake 任务的预期用途有点困惑,想咨询一下我是否应该使用 db:reset或编写自定义 Rake 任务。没什么聪明的,只是日常管理,而且我很可能会错过一个明显的文档,因为我是
所以我做了: git reset --hard #commithash # make a bunch of changes, fixes and so on. git add -A git commi
我已使用以下命令成功部署到 firebase 托管应用: firebase init firebase deploy 在这个阶段,我正在执行 git pull 以将 repo 下 pull 到暂存服务
当尝试在 Eclipse 的 git 存储库中 pull (团队|从上下文菜单中 pull )时,出现 Could not get advertised Ref for branch refs/hea
我是一名优秀的程序员,十分优秀!