Javascript jQuery在离开页面几分钟后出现多个幻灯片效果错误

Javascript jQuery在离开页面几分钟后出现多个幻灯片效果错误,javascript,jquery,css,jquery-ui,cross-browser,Javascript,Jquery,Css,Jquery Ui,Cross Browser,我的自定义滑块脚本有一个bug。当我在页面上时,一切都很顺利,但当我打开另一个选项卡浏览一分钟左右,然后回到我的页面时,我的脚本就疯狂了。。。脚本非常简单 -滑块中没有图像,这就是为什么它看起来不像应该的那样漂亮 function show12(evt){ $('#number_1').unbind(); $('#number_2').unbind(); // First slide $('#number_1').css({ position: 'absolute', top:

我的自定义滑块脚本有一个bug。当我在页面上时,一切都很顺利,但当我打开另一个选项卡浏览一分钟左右,然后回到我的页面时,我的脚本就疯狂了。。。脚本非常简单

-滑块中没有图像,这就是为什么它看起来不像应该的那样漂亮

function show12(evt){
$('#number_1').unbind();
$('#number_2').unbind();
// First slide
$('#number_1').css({
    position: 'absolute',
    top: '9px',
    left: '10px',
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

$('#slide_1').css({
    position: 'absolute',
    top: '9px',
    left: '47px',
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

// Second slide
$('#number_2').css({
    position: 'absolute',
    top: '9px',
    left: '445px',
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

$('#slide_2').css({
    position: 'absolute',
    top: '9px',
    left: '481px',
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

// Third slide  
$('#number_3').css({
    position: 'absolute',
    top: '9px',
    left: '879px'
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

$('#slide_3').css({
    display: 'none'
});

// Forth slide  
$('#number_4').css({
    position: 'absolute',
    top: '9px',
    left: '917px'
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

$('#slide_4').css({
    display: 'none'
});

$('#number_1, #number_2').hover(
    function(){window.clearInterval(timer); i=1;}
);

$('#number_1, #number_2').mouseout(
    function(){
        $(this).unbind();
        timer = window.setInterval(function(){slideLogos();}, 4000); i=1;
    }
);


$('#number_3').hover(function(){$(this).unbind(); i++; show34();});
$('#number_4').hover(function(){$(this).unbind(); i++; show34();});

}

function show34(){
$('#number_3').unbind();
$('#number_4').unbind();

    // First slide
$('#number_1').css({
    position: 'absolute',
    top: '9px',
    left: '10px',
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

$('#slide_1').css({
    display: 'none'
});

// Second slide
$('#number_2').css({
    position: 'absolute',
    top: '9px',
    left: '48px',
}).effect('slide', {
    direction: 'left',
    mode: 'show'
}, 'slow');

$('#slide_2').css({
    display: 'none'
});

// Third slide  
$('#number_3').css({
    position: 'absolute',
    top: '9px',
    left: '86px'
}).effect('slide', {
    direction: 'right',
    mode: 'show'
}, 'slow');

$('#slide_3').css({
    display: 'inline-block',
    position: 'absolute',
    top: '9px',
    left: '123px',
}).effect('slide', {
    direction: 'right',
    mode: 'show'
}, 'slow');

// Forth slide
$('#number_4').css({
    position: 'absolute',
    top: '9px',
    left: '521px'
}).effect('slide', {
    direction: 'right',
    mode: 'show'
}, 'slow');

$('#slide_4').css({
    position: 'absolute',
    top: '9px',
    left: '558px',
}).effect('slide', {
    direction: 'right',
    mode: 'show'
}, 'slow');

$('#number_3, #number_4').hover(
    function(){window.clearInterval(timer); i=0;}
);

$('#number_3, #number_4').mouseout(
    function(){
        $(this).unbind();
        timer = window.setInterval(function(){slideLogos();}, 4000); i=0;
    }
);

$('#number_1').hover(function(){$(this).unbind(); i++; show12();});
$('#number_2').hover(function(){$(this).unbind(); i++; show12();});
}

function slideLogos(){


switch(i%2){
    case 0:
        show12();
        break;
    case 1:
        show34();
        break;
}
i++;
}

var i = 1;
var timer;

$('document').ready(function(){

show12();

timer = setInterval(function(){slideLogos();}, 4000);

});

Number\u n
-数字总是显示在滑块中,
Slide\u n
-是正在显示/隐藏的幻灯片,对此表示抱歉:)

我曾经遇到过同样的问题。在我返回到页面之前,我不会说脚本像动画一样疯狂。我不知道这种情况是否会发生在你身上,但对我来说,滑动最终会减慢到正常速度。我还注意到,在所有浏览器中都发生了同样的事情。所以我认为这一定是由jQuery引起的。通过恢复到较旧版本的jQuery(如果我没记错的话,是1.5而不是1.6),问题果然消失了。

由于requestAnimationFrame()的性质,您不应该使用setInterval或setTimeout循环对动画进行排队

文档建议对元素使用动画回调或jQuery.queue()函数

另外,关于队列的这个答案非常有趣:

1)您需要用英语对代码进行注释或分解。这个问题只能在奇怪的情况下复制,而且javascript变量/函数名的命名都很糟糕,没有给出实际发生的情况的上下文。而且多次设置“position:absolute”是多余的,也不是必要的。谢谢您的评论。我将尝试删除
position:absolute
。你应该更仔细地阅读这些文件。请查看张贴的答案。您认为
Queue()
可以立即(而不是同时)启动动画吗?我的book Manning jQuery正在运行中,对此主题没有任何内容。队列不会改变当前动画逻辑的行为,它只是确保行为一致的机制。尝试使用回调函数添加队列(),并确保同时调用Dequeue()。有关各种代码示例,请参见jquery文档。