减少jQuery颜色动画的加载时间
Reduce load time on jQuery color animation
我试图让每个跨度以 3 秒的间隔在随机颜色之间旋转。
JSFiddle: http://jsfiddle.net/WERFJ/21/
<h1><span class="first">TEXT1</span> <span class="second">TEXT2</span> <span class="third">TEXT3</span></h1>
目前我正在使用下面的代码和jquery.animate-colors插件。有没有办法使这个运行或更快地获得相同的效果。Chrome可以处理它,但FF经常崩溃。谢谢!
$(document).ready(function() {
spectrum();
function spectrum(){
var hue1 = 'rgb(' + 128 + ',' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ')';
var hue2 = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + 128 + ',' + (Math.floor(Math.random() * 256)) + ')';
var hue3 = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ',' + 128 + ')';
$('.first').animate( { color: hue1 }, 3000);
$('.second').animate( { color: hue2 }, 3000);
$('.third').animate( { color: hue3 }, 3000);
spectrum();
}
});
我认为您的问题是递归调用没有等待动画完成。 通过将调用作为回调添加到最后一个 Animate 调用中,您将仅在最后一个调用完成时调用它,而不是排队和无限的动画链。 http://jsfiddle.net/WERFJ/23/它现在似乎在火狐中工作正常
$(document).ready(function() {
spectrum();
function spectrum() {
var hue1 = 'rgb(' + 128 + ',' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ')';
var hue2 = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + 128 + ',' + (Math.floor(Math.random() * 256)) + ')';
var hue3 = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ',' + 128 + ')';
$('.first').animate({
color: hue1
}, 3000);
$('.second').animate({
color: hue2
}, 3000);
$('.third').animate({
color: hue3
}, 3000, spectrum);
}
});
从用户的角度来看,最初的延迟是因为浏览器不会更新显示,直到您的函数完成运行,但您的函数只是递归地调用自己,直到出现堆栈溢出 - 或者,在 FF 中我得到了"太多递归"错误。只有在"太多递归"错误使函数崩溃之后,所有排队的动画才真正开始工作。
您可以通过更改函数的最后一行来避免这种情况,以使用 setTimeout()
对另一个调用进行排队,而不是让它直接调用自身:
setTimeout(spectrum,3100);
http://jsfiddle.net/WERFJ/24/
使用 $.when
包装动画,then()
运行下一个系列。 然后,jQuery 延迟对象确保所有动画在重新开始之前都已完成
演示:http://jsfiddle.net/WERFJ/26/
var anim_1 = $('.first').animate({ color: hue1}, 3000);
var anim_2 = $('.second').animate({color: hue2}, 3000);
var anim_3 = $('.third').animate({color: hue3}, 3000);
$.when(anim_1, anim_2, anim_3).then(spectrum);
相关文章:
- 对于加载时间过长的循环来说是巨大的
- 谷歌如何确定网站加载时间
- 指令加载真的很长,检查加载时间的方法
- 如何使用队列呈现多个HighCharts以防止加载时间过长
- Javascript加载时间过长
- 如何计算angular JS应用程序(单页应用程序)的页面加载时间
- 如果页面加载时间超过 10 秒,如何刷新页面
- 画布 HTML 加载时间
- URL 长度是否会导致页面加载时间不同
- jquery加载时间和里面的css样式
- 我们怎么知道消除HTML/JS/CSS文件中的空白可以缩短页面加载时间呢
- 如何使用javascript来衡量第三方广告的加载时间
- 如何在boomrang页面加载时间中添加ajax执行时间
- CSS与Jquery、滑块、动画、灯箱..加载时间与功能
- mobile.加载时间过长,无法显示
- 如何改进使用JQuery Mobile的Android WebView的加载时间
- HTML5(测量页面加载时间)
- 如何为未加载、加载时间过长和被阻止的css文件编写回退
- Can-react.js可以提高加载时间
- Javascript窗口/图像加载时间 - 这应该不起作用,但它确实有效