CSS3淡入效果在页面加载时出现,几秒后消失。

5

我在StackOverflow上搜索了一段时间,但似乎还没有人问过这个问题。

如果我错过了答案,请原谅,问题如下:

我正在处理一个页面,页面加载时会淡入一个div,现在我想在几秒钟后将其淡出。我似乎找不到正确的方法来完成这个任务。

@-webkit-keyframes fadein {
from {
opacity:0;
}
to {
opacity:1;
}
}
@-webkit-keyframes fadeout {
from {
    opacity:1;
}
to {
    opacity:0;
}
}
div {
width: 400px;
margin: 0 auto;
text-align: center;
-webkit-animation:fadein 1s;
-webkit-animation:fadeout 1s;
-webkit-animation-delay:fadeout 5s;
}

这是HTML代码:

 <div>
 <h1><font size="+6"> :(</font></h1><br />
 <h1>Whoops<span>Something went wrong</span></h1><br />
 <h1><span><div id="timer_div">you will be redirected in</div> seconds</span></h1>
 </div>

project - Ioncap
4个回答

10

你的问题在于同时应用了两个动画,而实际上你想要按顺序运行它们。为了可靠地使其工作,你有两个选择:

CSS only: http://jsfiddle.net/marionebl/M9LR6/

注意:opacity: 0;可以在动画完成时保持消息隐藏。此方法不能在IE <= 9中工作,因为它不支持关键帧动画:http://caniuse.com/#feat=css-animation

@keyframes fadeInOut {
    0% {
        opacity: 0;
    }
    16% {
       opacity: 1;
    }
    84% {
       opacity: 1;
    }
    100% {
       opacity: 0;
    }
}

.message {
    width: 400px;
    margin: 0 auto;
    opacity: 0;
    text-align: center;
   -webkit-animation: fadeInOut 6s;
   animation: fadeInOut 6s;
}

涉及JS: http://jsfiddle.net/marionebl/P26c9/1/

相对而言更加灵活易变,支持IE9。

CSS:

@-webkit-keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
@keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

@-webkit-keyframes fadeOut {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
    }
}
@keyframes fadeOut {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
    }
}

.fadeIn {
    -webkit-animation: fadeIn;
    animation: fadeIn;
    opacity: 1;
}

.fadeOut {
    -webkit-animation: fadeOut;
    animation: fadeOut;
    opacity: 0;
}

.fast {
    -webkit-animation-duration: 1s;
    animation-duration: 1s
}

.message {
    width: 400px;
    margin: 0 auto;
    text-align: center;
}

JS:

var $message = $('.message');
$message.addClass('fadeIn fast');

setTimeout(function(){
   $message.removeClass('fadeIn').addClass('fadeOut');
}, 5000);

3

每个元素应只使用一种动画效果: http://jsfiddle.net/maximgladkov/YR5UM/

@-webkit-keyframes fade {
    0% {
        opacity: 0;
    }

    10% {
        opacity: 1;
    }

    90% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

div {
    width: 400px;
    margin: 0 auto;
    text-align: center;
    -webkit-animation: fade 6s;
    -webkit-animation-fill-mode: both;
}

0

你尝试过在这个表单中加入延迟吗?

transition-delay: 2s;
-webkit-transition-delay: 2s; /* Safari */

或者:

animation-delay:2s;
-webkit-animation-delay:2s; /* Safari and Chrome */

对不起,但它似乎对我不起作用,一开始它会淡入,但那就是所有发生的事情。 - Ioncap

0
使用Jquery动画。
$(document).ready(function(){
$('.div').delay(2000).animate({opacity:100},1000)
})

页面加载时会延迟2秒,然后div会淡入。


除了使用 CSS 之外,还有另一种方法。应该有更多的浏览器支持。 - Dylan de St Pern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接