设置间隔导致浏览器崩溃
setInterval Causing Browser to Crash
我有 3 个div:
<div class="heading-bold"></div>
<div class="heading-raise"></div>
<div class="heading-isis"></div>
我希望它们依次出现,然后淡出,每个之间都有定时延迟。然后,我需要在无限循环中重复该过程。我整理了一个相当粗糙的方法,它确实有效,但是添加setInterval
以循环序列会导致浏览器最终崩溃。
这是我的代码:
window.onload = function start() {
animate();
}
function animate() {
window.setInterval(animate, 9500);
var delay = 1000;
setTimeout(function() {
$('.heading-bold').css({
"display": "block"
});
}, delay);
var delay = 3000;
setTimeout(function() {
$('.heading-bold').fadeOut(750);
}, delay);
var delay = 3750;
setTimeout(function() {
$('.heading-bold').remove(750);
}, delay);
setTimeout(function() {
$('.heading-raise').css({
"display": "block"
});
}, delay);
var delay = 5750;
setTimeout(function() {
$('.heading-raise').fadeOut(750);
}, delay);
var delay = 6250;
setTimeout(function() {
$('.heading-raise').remove(750);
}, delay);
setTimeout(function() {
$('.heading-isis').css({
"display": "block"
});
}, delay);
var delay = 8750;
setTimeout(function() {
$('.heading-isis').fadeOut(750);
}, delay);
var delay = 9500;
setTimeout(function() {
$('.heading-isis').remove(750);
}, delay);
}
我确信有一种更有效的方法可以做到这一点,但是我想知道是否有任何简单的解决方案可以阻止浏览器崩溃。
问题就在这里:
function animate () {
window.setInterval(animate, 9500);
每次 animate
函数运行时,它都会启动一个间隔计时器以再次调用它。 这意味着它第一次运行时,它将在 9500 毫秒内运行一次。 第二次运行时,它会启动另一个间隔计时器,因此在 9500ms 后它将运行两次。 然后4次。然后8...等。
您要么希望将该setInterval
更改为setTimeout
,以便它仅在这 9500 毫秒后运行一次(然后再次排队并再次调用 setTimeout
),或者将调用移动到 setInterval
:
window.onload = function start() {
animate();
setInterval(animate, 9500);
}
你为什么要打电话
window.setInterval(animate, 9500);
在动画功能内部?您正在设置一个间隔(无限),该间隔在每次运行时(无限)重新调整自身,因此它将占用比所需多得多的资源。
像这样重新安置它;
function animate () {
...
}
window.onload = function start() {
animate();
window.setInterval(animate, 9500);
}
也许以下内容适合您:
编辑:我通过在动画结束时相互调用 fadeIn() 和 fadeOut() 来添加无限循环。
var interval_ms = 1.5 * 1000;
var fadeIn;
var fadeOut;
fadeIn = function(){
$( "#div1" ).fadeIn( interval_ms,
function() {
$( "#div2" ).fadeIn( interval_ms,
function() {
$( "#div3" ).fadeIn( interval_ms , fadeOut );
}
);
}
);
};
fadeOut = function(){
$( "#div3" ).fadeOut( interval_ms,
function() {
$( "#div2" ).fadeOut( interval_ms,
function() {
$( "#div1" ).fadeOut( interval_ms , fadeIn );
}
);
}
);
};
fadeIn();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="div1" class="heading-bold" style="display: none;" > div1 </div>
<div id="div2" class="heading-raise" style="display: none;" > div2 </div>
<div id="div3" class="heading-isis" style="display: none;" > div3 </div>
相关文章:
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- javascript audio currentTime使一些浏览器崩溃
- 在浏览器崩溃之前检测到内存耗尽
- 输入输入前浏览器崩溃
- three.js内存泄漏/浏览器崩溃
- Ajax 请求仪表板页面上的浏览器崩溃
- set超时在“while”内会导致浏览器崩溃.我怎样才能避免它
- 设置设置间隔函数正在运行并导致浏览器崩溃
- 高效的Javascript组合函数,不会使浏览器崩溃
- 我的脚本使浏览器崩溃
- SlickGrid在选择大范围的行时使浏览器崩溃
- setInterval 在运行用户脚本时使我的浏览器崩溃
- 添加依赖项后浏览器崩溃
- Javascript/Jquery代码使我的浏览器崩溃
- 无限滚动会导致浏览器崩溃吗?
- 为什么这 while 循环会使浏览器崩溃
- 设置间隔导致浏览器崩溃
- JavaScript函数使我的浏览器崩溃
- 旧的JavaScript函数使浏览器崩溃
- 如何使用 IndexedDB 制作一个很长的字符串而不会使浏览器崩溃