我可以为CSS背景图像的不透明度设置动画吗?

时间:2010-12-10 01:50:30

标签: javascript css animation opacity

CSS / Javascript不是我的强项,所以我想问一下是否可以将背景图像的不透明度更改为0.5。

我有一个div

background-image: url(images/nacho312.png);
background-position: -50px 0px;
background-repeat: no-repeat no-repeat;

但是当我加载某个视图时它看起来不太好,所以我想在显示该视图时产生“半解析”效果。有可能吗?

由于

3 个答案:

答案 0 :(得分:4)

这是一个开始。

var element = document.getElementById('hello'),
    targetOpacity = 0.5,
    currentOpacity,
    interval = false,


interval = setInterval(function() {

   currentOpacity = element.getComputedStyle('opacity');

   if (currentOpacity > targetOpacity) {
      currentOpacity -= 0.1;
      element.style.opacity = currentOpacity;

   } else {
      clearInterval(interval);
   }


}, 100);

See it on jsFiddle

window.onload = function() { }上运行此功能,或在DOM就绪事件上研究跨浏览器。

当然,使用像jQuery这样的库会更容易。

$(function() {
   $('hello').fadeTo('slow', 0.5);
});

这依赖于容器的子容继承不透明度。要做到这一点而不影响他们有点痛苦,因为你不能通过opacity: 1重置孩子的不透明度。

答案 1 :(得分:3)

如果你想平滑地制作动画而不需要做太多额外的工作 - 这对于jQuery(或其他类似的库)来说是一个很好的任务。

使用jQuery you could do

$('#id_of_div').fadeTo('fast', 0.5);

在相关DIV上获得快速动画淡化效果。

更新:如果您想要实际淡化背景图片,而不是DIV的任何前景内容,这将更加困难。我建议使用一个容器DIV,其位置为:relative和两个内部DIV,其位置为:absolute; 。内部DIV中的第一个可以具有背景图像并且具有比第二个DIV更低的z-index,并且第二个DIV将包含在前景中显示的任何文本等。如果需要,您可以调用$('#id_of_first_div').fadeTo('fast', 0.5);来淡化包含背景图像的DIV。

顺便说一句,你的问题的字面答案是“不,你不能动画CSS背景图像的不透明度” - 你只能(当前)动画DOM元素的不透明度,而不是它的属性,因此需要对于上述黑客攻击。

其他更新:如果您想避免使用任何第三方库,可以使用Alex's answer中的方法处理背景DIV的淡入淡出。

答案 2 :(得分:1)

background-image: url(images/nacho312.png);
background-position: -50px 0px;
background-repeat: no-repeat no-repeat;

opacity:0.5; //for firefox and chrome
filter:alpha(opacity=50); //for IE
相关问题