使用 fadeOut 将 div 数量加倍

发布于 2024-12-03 17:16:37 字数 1811 浏览 1 评论 0原文

我遇到 fadeOut() 问题。如果我使用 fadeOut(),我的

会乘以 2,但如果我只制作
直接出现(
上没有淡入淡出),没有问题。你知道我能为此做什么吗?

这是不起作用的行(单击后,它给我两个

而不是一个,然后如果我再次单击四个
出现等)

div.fadeOut().empty().append(content).fadeIn('fast', function(){

和有效的(但我希望有 fadeOut ):

div.empty().append...

以及整个代码:

$(document).ready(function(){
    var loader = $('#loading');
    var div = $("#provisoire");

    div.append($(".content:first").html()).css({'display':'block'});

    $(".plus").click(function(){
        var name = $(this).attr("rel");
        changeContent(name);
        return false;
    });

    function changeContent(name){
        var content = (name)?$("#"+name).html():$(".content:first").html();
        loader.fadeIn();
        $('html,body').animate({'scrollTop':0}, 600, function(){
            div.empty().append(content).fadeIn('fast', function(){ //*** here
                loader.fadeOut();
                if(name){
                    div.find('.childB').append('<a href="#" style="background:green;" class="retour">Retour</div>');
                    div.find('.retour').click(function(){
                        changeContent();
                        return false;
                    });
                }
                else {
                    $(".plus").click(function(){
                        var name = $(this).attr("rel");
                        changeContent(name);
                        return false;
                    });
                }
            });
        });
    }
});

I have a problem with a fadeOut(). My <div>'s are multiplied by two if I use the fadeOut(), but if I just make the <div>'s appear directly (with no fade on the <div>'s), there's no problem. Do you know what I could do for that?

Here's the line that does not work (after a click, it gives me two <div>'s instead of one, then if I click again four <div>'s appear, etc.)

div.fadeOut().empty().append(content).fadeIn('fast', function(){

and the one that works (but I'd like to have the fadeOut though):

div.empty().append...

and the entire code:

$(document).ready(function(){
    var loader = $('#loading');
    var div = $("#provisoire");

    div.append($(".content:first").html()).css({'display':'block'});

    $(".plus").click(function(){
        var name = $(this).attr("rel");
        changeContent(name);
        return false;
    });

    function changeContent(name){
        var content = (name)?$("#"+name).html():$(".content:first").html();
        loader.fadeIn();
        $('html,body').animate({'scrollTop':0}, 600, function(){
            div.empty().append(content).fadeIn('fast', function(){ //*** here
                loader.fadeOut();
                if(name){
                    div.find('.childB').append('<a href="#" style="background:green;" class="retour">Retour</div>');
                    div.find('.retour').click(function(){
                        changeContent();
                        return false;
                    });
                }
                else {
                    $(".plus").click(function(){
                        var name = $(this).attr("rel");
                        changeContent(name);
                        return false;
                    });
                }
            });
        });
    }
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

巨坚强 2024-12-10 17:16:37

使用 Tentonaxe 的解决方案,尝试在以下行中使用 html 或 body:

 $('html').animate({'scrollTop':0}, 600, function(){

我认为同时定义 html 和 body 可能会调用回调函数两次。

With Tentonaxe's solution, try using either html or body on the following line:

 $('html').animate({'scrollTop':0}, 600, function(){

I think having both html and body defined might call the callback function twice.

ま柒月 2024-12-10 17:16:37

尝试使用 fadeOut 的回调函数来清空并附加内容,这样在完成淡出之前不会清空并附加内容:

div.fadeOut('fast',function(){
  div.empty().append(content).fadeIn('fast',function(){
    ...
  });
});

编辑:此外,您的主要问题是使用 .live( 绑定到 .plus 类'click') 并且只执行一次,最好是在 $(document).ready() 之外,但这需要一些重新安排。

$(document).ready(function(){
    var loader = $('#loading');
    var div = $("#provisoire");

    div.append($(".content:first").html()).css({'display':'block'});

    $(".plus").live('click',function(){
        var name = $(this).attr("rel");
        changeContent(name);
        return false;
    });
    $('.retour').live('click',function(){
      changeContent();
      return false;
    });

    function changeContent(name){
        var content = (name)?$("#"+name).html():$(".content:first").html();
        loader.fadeIn();
        $('html,body').animate({'scrollTop':0}, 600, function(){
            div.empty().append(content).fadeIn('fast', function(){ //*** here
                loader.fadeOut();
                if(name){
                    div.find('.childB').append('<a href="#" style="background:green;" class="retour">Retour</div>');
                }
            });
        });
    }
});

try using the callback function of the fadeOut to empty and append content that way it isn't emptied and appended before it is done fading out:

div.fadeOut('fast',function(){
  div.empty().append(content).fadeIn('fast',function(){
    ...
  });
});

Edit: Also, your primary problem, bind to the .plus class using .live('click') and only do it once, preferably outside of the $(document).ready(), however that would take some rearranging.

$(document).ready(function(){
    var loader = $('#loading');
    var div = $("#provisoire");

    div.append($(".content:first").html()).css({'display':'block'});

    $(".plus").live('click',function(){
        var name = $(this).attr("rel");
        changeContent(name);
        return false;
    });
    $('.retour').live('click',function(){
      changeContent();
      return false;
    });

    function changeContent(name){
        var content = (name)?$("#"+name).html():$(".content:first").html();
        loader.fadeIn();
        $('html,body').animate({'scrollTop':0}, 600, function(){
            div.empty().append(content).fadeIn('fast', function(){ //*** here
                loader.fadeOut();
                if(name){
                    div.find('.childB').append('<a href="#" style="background:green;" class="retour">Retour</div>');
                }
            });
        });
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文