Tengo un objeto de presentación de diapositivas hecho a medida para realizar las cosas habituales que el nombre indica en un sitio web. Todo funciona bien, excepto cuando cambio las pestañas en Chrome y vuelvo a la pestaña del sitio web. Cuando eso sucede, la presentación de diapositivas se vuelve loca y comienza a desvanecerse las imágenes sin tener en cuenta el intervalo setInterval
dado. No puedo encontrar nada relacionado con esto, así que al menos quiero saber si hay un problema con el código o un problema de software.setInterval no funciona correctamente en Chrome
Aquí está el código (que se utiliza con jQuery):
$(function() {
// slideshow
var slideshow = {
id : false,
current : 0,
count : 0,
interval : false,
init : function(data) {
if (!data)
return false;
$.each(data, $.proxy(
function(index, value) {
this[index] = data[index];
}, this)
);
this.count = this.images.length;
for (x=1;x<=this.count;x++)
$('#slider ul.nav').append('<li></li>');
$('#slider ul.nav li').live('click', function()
{
slideshow.click(this);
});
$('#slider ul.nav li:eq(0)').addClass('on');
$('#slider ul.nav').css('width', (15*this.count)+'px');
return true;
},
start : function() {
slideshow.id = setInterval(function() { slideshow.action(); }, slideshow.options.interval);
},
stop : function() {
clearInterval(slideshow.id);
},
action : function() {
slideshow.current < (slideshow.count-1) ? slideshow.current++ : slideshow.current = 0;
$('#slider img').fadeOut('normal', function() {
$('#slider img').attr('src', slideshow.images[slideshow.current].url);
$('#slider ul.nav li').removeClass('on');
$('#slider ul.nav li:eq('+slideshow.current+')').addClass('on');
$('#slider div.title').html(slideshow.images[slideshow.current].title);
$('#slider div.description').html(slideshow.images[slideshow.current].description);
$('#slider a.more').attr('href', slideshow.images[slideshow.current].target);
}).fadeIn('normal');
return true;
},
click : function(o) {
slideshow.stop();
var index = $('#slider ul.nav li').index(o);
slideshow.current = index;
$('#slider img').fadeOut('normal', function() {
$('#slider img').attr('src', slideshow.images[index].url);
$('#slider ul.nav li').removeClass('on');
$(o).addClass('on');
$('#slider div.title').html(slideshow.images[index].title);
$('#slider div.description').html(slideshow.images[index].description);
$('#slider a.more').attr('href', slideshow.images[index].target);
}).fadeIn('normal');
slideshow.start();
return true;
},
};
slideshow.init(slider);
slideshow.start();
});
Intentó 'setTimeout()' sin ningún éxito. El problema con las pestañas de Chrome todavía sucede incluso si digo al script que haga la diferencia de marcas de tiempo y ajuste el intervalo (usando 'console.log' podría ver que nunca cambia, lo que me hace creer que Chrome congela el proceso de pestañas o algo así) . – yoda
Ver esta respuesta: http://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs/6032591#6032591 – thomasrutter
Eso es todo, gracias :) – yoda