2

所以我写了以下代码:

$('.frame').each(function(){
    $(this).click(function(e){
        var id = $(this).attr('id');
        e.preventDefault();
        $('.active').removeClass('active').fadeOut(800).queue(function(){
            $('#box'+id).addClass('active').fadeIn(800);
        });
    });
});

因此,每当单击带有框架类的按钮时,它都会获取相应的框并将其淡入……至少在理论上是这样。它第一次适用于每个盒子,所以我可以点击一次,它们都可以正确淡入。但是每当我想淡入一个,我之前已经淡入了(即使我之前点击了所有其他的),它不会再次淡入。它仍然添加活动类,正确淡出另一个类并删除其活动类,但它不会淡入。

好像这还不够奇怪,代码立即停止工作,因为我引发了上述错误。可以这么说,一旦我第二次尝试淡入一个对象并且它不会,我不能再次淡入另一个对象,它甚至不再添加活动类(但仍然删除旧的!)

希望你能帮忙。

4

2 回答 2

0

尝试这个:

$('.frame').each(function(){
    $(this).click(function(e){
        var id = $(this).attr('id');
        e.preventDefault();
        $('.active').removeClass('active').fadeOut(800, function(){
            $('#box'+id).addClass('active').fadeIn(800);
        });
    });
});

也就是说,不要.queue().fadeOut();之后使用 而是将匿名函数作为.fadeOut(). 根据.queue()文档

请注意,在添加带有 的函数时.queue(),我们应确保.dequeue()最终调用该函数,以便执行行中的下一个函数。

所以你可以使用.queue(),但如果你这样做,你需要.dequeue()从回调中调用。.fadeOut()当需要回调时,不需要使这样的事情复杂化。

于 2013-05-22T09:18:40.310 回答
0
$('.frame').click(function(e) {
    var id = $(this).attr('id');
    e.preventDefault();
    $('.active').removeClass('active').fadeOut(800, function() {
        $('#box' + id).addClass('active').fadeIn(800);
    });
});

如果这不起作用,请提供您的 HTML 或小提琴

于 2013-05-22T09:39:50.117 回答