【问题标题】:Animate and then replace the class of div with fade effect动画然后用淡化效果替换div的类
【发布时间】:2013-06-19 17:02:16
【问题描述】:

JSFiddle:Fiddle

它应该工作的方式如下:

1 - 红色块从上到下滑动
2 - 一旦完成,红色框会淡出
3 - 然后蓝色框淡入

以下是html:

<div class="posRel">
    <div class="trans1"></div>
    <div class="trans2"></div>
    <div class="trans3"></div>
    <div class="trans4"></div>
    <div class="trans5"></div>
    <div class="trans6"></div>
    <div class="trans7"></div>
</div>

下面是js:

    for (i = 1; i <= 7; i++) {
        $('.trans' + i).toggleClass('toggle');
    }

    setTimeout(function () {
        $('.toggle').fadeOut('slow', function () {
            $(this).addClass('fSmall1').fadeIn('slow');
        });
    }, 2000);

项目链接:http://50.87.144.37/~projtest/team/design/EO/page-2.html

链接到JSFiddle

我面临的问题:

  • fadeOut 和 fadeIn 不起作用
  • 有什么比 settimeout 更好的方法吗?

我在 js/jQuery 方面相当缺乏经验,所以也请随时指出任何愚蠢的错误。谢谢。

【问题讨论】:

  • 能否请您提供指向您的测试用例的正确链接(例如在 jsfiddle 中)。 SO 不允许使用数字网址 (IP)。
  • 您无法访问该链接吗?
  • 我确定可以复制和粘贴它,但它不可点击,因为您已将其格式化为代码,因为 SO 不允许此类链接(您已经注意到)。
  • 我正在 Chrome 中检查您的项目,它似乎可以正常工作。你在测试什么浏览器?
  • 这是我在工作中分配的 ftp,除了将其作为代码发布之外,我没有任何其他方式可以为您提供链接。如果您可以访问,那么问题出在哪里?

标签: javascript jquery html css css-transitions


【解决方案1】:

我使用了 fadeto 属性,请尝试链接。 http://jsfiddle.net/zcYLM/10/

[http://jsfiddle.net/zcYLM/10/][1]


  [1]: http://jsfiddle.net/zcYLM/10/

【讨论】:

    【解决方案2】:

    如果您使用的是 jQueryUI,这将起作用:

    http://jsfiddle.net/zcYLM/11/(这是更新的)

    这是一个基本的、精简的问题示例,但您可以将其应用到您的代码中。

    JS:

    $(document).ready(function() {
        $('div[class*=trans]')
            .toggleClass('toggle', 2000)
            .promise()
            .done(function() {
                $(this)
                    .fadeOut(2000)
                    .promise()
                    .done(function() { 
                        $(this)
                            .addClass('blue')
                            .fadeIn(2000);
                    });
            });
    });
    

    CSS:

    .posRel {
        position:relative;
    }
    
    div.posRel > div {
        background-color:red;
        position:absolute;
        top:0px;
        width:100px;
        height:100px;
    }
    
    div.posRel > div.trans1 { left:-50px; }
    div.posRel > div.trans1.toggle { left:100px; top:150px; }
    div.posRel > div.blue { background-color:blue; }
    

    【讨论】:

    • 嗯,我目前正在避免使用 jQuery Ui,但如果我没有选择余地,那么我会考虑这个解决方案,不过还是谢谢。
    【解决方案3】:

    我会尝试一击解决您的大部分问题,但我怀疑我们可能需要来回一些时间才能完全解决它。

    首先,您的淡入/淡出问题与触发动画的方式有关。您实际上是在单独调用每个元素的淡出然后淡入,但是根据您在需求中描述的功能,您应该在容器上触发一个淡入:

    for (i = 1; i <= 7; i++) {
        $('.trans' + i).toggleClass('toggle');
    }
    
    setTimeout(function () {
        $('.posRel').fadeOut('slow', function () {
            $('.toggle').addClass('fSmall1');
            $('.posRel').fadeIn('slow');
        });
    }, 2000);
    

    Fiddle

    平滑过渡

    如果您希望平滑淡入淡出而不闪烁,然后再重新进入,您可以改用fadeTo() 方法。可以在下面找到 FadeTo() 示例,这将使所有形状下降,暂停几分之一秒,然后改变颜色。您可以尝试移除 setTimeout,因为 fadeTo 控制动画时间,但我已将其尽可能接近原始设置。

    for (i = 1; i <= 7; i++) {
        $('.trans' + i).toggleClass('toggle');
    }
    
    setTimeout(function () {
        $('.posRel').fadeTo('slow', 2, function () {$('.toggle').addClass('fSmall1');});
    }, 2000);
    

    fadeTo() Example Fiddle

    【讨论】:

    • 很好的解决方案,不过有一个问题,如果你去访问我发布的项目链接,那么你会看到现在图像消失了,然后新的图像消失了。你能告诉我第一个方法吗溶解到第二个?
    • 当然,看我对上面的fadeTo方法的评论,我很快就会发布一个新的小提琴
    • 更新了 js 以包含一个 fadeTo() 示例小提琴,它应该按照你的意愿行事。
    • 现在它恢复了原来的样子,因为淡入淡出效果消失了,我的意思是在我的项目链接上。 :/ 我很抱歉我对此太天真了。
    • 您网站上的代码与我上面的示例有点不同,但适用相同的规则。您网站上的代码存在的问题是超时/淡出值不匹配。试试我的平滑过渡示例,看看是否有帮助,它的超时/淡入淡出值非常好。
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2021-07-04
    • 2014-04-25
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多