动画然后用淡入淡出效果替换div类

时间:2013-06-19 06:35:02

标签: javascript jquery html css css-transitions

JSFiddle:Fiddle

它的工作方式如下:

1 - 红色块从上到下滑动
2 - 一旦完成,则红框fadeOut
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我很缺乏经验,所以请随意指出任何愚蠢的错误。感谢。

3 个答案:

答案 0 :(得分:1)

我会尝试在一次攻击中攻击你的大多数问题,但我怀疑我们可能需要一些来回来完全解决它。

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

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

答案 1 :(得分:1)

如果你正在使用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; }

答案 2 :(得分:1)

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

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


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