javascript - 为什么 setInterval 一段时间后无法正常工作?

标签 javascript jquery

我编写了一段 JavaScript 代码,每 10 秒向用户显示一次随机报价。我使用 jquery 更新 div 并使用 setInterval 重复该操作。我正在从 JavaScript 数组中获取随机引用。

但是当我测试这个时,似乎在一段时间后(比如3-5分钟)它无法正常工作,我有一些jquery效果,例如fadeIn和fadeOut,但它们是在报价更改之前执行的。这是js代码;

var quotes = [
    "Some String",
    "Some String",
    "Some String"
];

$(function() {
    var $rand = $('div#randomQuote > p');
    var random_quote = quotes[Math.floor(Math.random() * quotes.length)];     
    $rand.html(random_quote);
    $rand.animate( {"opacity" : 0}, 0);
    $rand.animate( {"opacity" : 1}, 500);
    $rand.delay("9000");
    $rand.animate( { "opacity" : 0 }, 500 );    
});


function randomQuote () {
    var $rand = $('div#randomQuote > p');
    var random_quote = quotes[Math.floor(Math.random() * quotes.length)]; 
    $rand.html(random_quote);
    $rand.animate( {"opacity" : 1}, 500 );
    $rand.delay("9000");
    $rand.animate ( {"opacity" : 0}, 500 );
}

$(function () {
    setInterval(randomQuote, 10000);
});

虽然我不确定,但我认为这些行需要一些时间来计算并且它打破了循环。

var $rand = $('div#randomQuote > p');
var random_quote = quotes[Math.floor(Math.random() * quotes.length)]; 

问:我如何改进此代码以使其按预期工作?

提前致谢。

最佳答案

这样你的事件队列就会无限增长。在这种情况下你想使用的可能是 setTimeout 而不是 setInterval。我建议尝试这个链接:http://ejohn.org/blog/how-javascript-timers-work/

关于javascript - 为什么 setInterval 一段时间后无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362663/

相关文章:

javascript - 如何使用 javascript 将 JSON 中每个子节点的值汇总到父节点中?

javascript - jquery通过css自定义select2组件

jquery - 带有 Knockout 和 Bootstrap 的动态加载多项目幻灯片轮播

javascript - jQuery? : (. tolowercase .replace text.match) 当 URL 不可用时不起作用

javascript - 集合大小和数组长度 - sonarqube

javascript - 数组上的 mustache 渲染()不起作用

javascript - 等待消息,通过给定 ID 获取 channel

javascript - req.body 为空 Express js

javascript - 有没有办法在 Mobile Safari 中使用 TouchEndInside?

jquery - Wordpress 301 Moved Permanently 响应 Jquery.post 请求