根据时间设置背景

时间:2012-11-12 18:04:37

标签: javascript jquery

我有两张图片作为页面的背景:

<img src="http://www.narm.org.uk/home/images/Daylight%20design.jpg" id="background" alt="day" />
<img src="http://www.aphoenix.ca/photoblog/photos/NighttimeColours.jpg" id="h_background" alt="night" />

CSS会隐藏一个并显示另一个:

#background {
width: 100%;
height: 100%;
z-index: -1;
position: absolute;
}

#h_background {
width: 100%;
height: 100%;
display: none;
position: absolute;
z-index: -1;
}

javascript应检查它的时间并设置正确的背景。如果秒数> 30,然后有一个背景。如果没有,请设置另一个。

function setBackground() {

if (secs > 30) {
    $('#h_background').attr('id', 'background');
    $('#background').attr('id', 'h_background');
}

else if (secs < 30) {
    $('#background').attr('id', 'h_background');
    $('#h_background').attr('id', 'background');
}

setTimeout(function() {setBackground()}, 1000);

}​

我希望能够做的是在时间切换时添加到新背景的转换。

目前,背景会自动切换但不顺畅。关于什么是实现这一目标的有效方法的任何想法?下面是完整的jsfiddle,显示了我到目前为止所拥有的内容。 http://jsfiddle.net/gkMVf/2/

3 个答案:

答案 0 :(得分:0)

我会尝试css3必须提供的opacity。我会创建一个更加可控的淡出效果,以实现更平滑的过渡。一个图像的不透明度会逐渐增加,而另一个图像的不透明度会逐渐降低。

答案 1 :(得分:0)

使用jQuery,您可以使用fadeIn和fadeOut函数。

function setBackground() {

    if (secs > 30) {
        $('#h_background').fadeIn();
        $('#background').fadeOut();
    } else {
        $('#background').fadeIn();
        $('#h_background').fadeOut();
    }

    setTimeout( setBackground, 1000 );

}

这不依赖于CSS3或HTML5这么好的浏览器兼容性。

答案 2 :(得分:0)

正如另一位用户提到的,您可以尝试使用CSS3过渡。

有些像这样的CSS:

.background {
    width: 100%;
    height: 100%;
    z-index: -1;
    position: absolute;
    -webkit-transition: opacity 1s;
    -moz-transition: opacity 1s;
    -ms-transition: opacity 1s;
    -o-transition: opacity 1s;
    transition: opacity 1s;
}

.background.hidden {
    opacity: 0;   
}

然后是一些类似的javascript:

setInterval(function() {
    $('.background').toggleClass('hidden');
}, 30000)​

你可以让它更简单一些。试试jsFiddle:http://jsfiddle.net/gkMVf/3/