CSS3 中带有过渡的延迟模糊滤镜

Delayed blur-filter with transition in CSS3

我需要先在加载后延迟过渡的元素上进行褪色模糊处理。其次另一个元素应该淡入。我正在使用 animate.css.

我正在使用 animate.css。

HTML

    <div class="main">
        <div class="wrapper">
            <div id="target" class="blur>This element has a background-image, which should be blured</div>
        </div>
        <div class="content-layer">
            <input id="searchMain" class="animated fadeIn delay">
        </div>
    </div>

CSS

.blur {
    -webkit-filter: blur(5px);
       -moz-filter: blur(5px);
        -ms-filter: blur(5px);
         -o-filter: blur(5px);
            filter: blur(5px);

    -webkit-transition: all 0.5s linear;
       -moz-transition: all 0.5s linear;
        -ms-transition: all 0.5s linear;
         -o-transition: all 0.5s linear;
            transition: all 0.5s linear;

    -webkit-transition-delay: 1s;
            transition-delay: 1s;
}
.delay {
    -webkit-animation-delay: 1s;
       -moz-animation-delay: 1s;
            animation-delay: 1s;
}

有了这个,inputField 的延迟淡入效果很好。 target 也变得模糊。但是这个模糊不是动画也没有延迟。

由于您并不是特别要求仅 CSS/HTML 的解决方案,因此可以通过添加一些 jquery 来获得您想要的解决方案。

<div class="main">
    <div class="wrapper">
        <div id="target" class=">This element has a background-image, which should be blured</div><!-- Start without classes -->
    </div>
    <div class="content-layer">
        <input id="searchMain" class="animated fadeIn delay"> 
    </div>
</div>

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" defer>
    $(function() {
        setTimeout(function(){
            console.log('done waiting!'); // Just to verify the delay works
            $('#target').addClass('blur');
        }, 1000); // A delay of 1000ms
    });
</script> 

不用说,请确保动画效果如您所愿。这只是为了延迟,在页面加载之后。从这里开始,也很容易在此基础上进行构建。比如在用户滚动到元素时添加动画等等

更新为#target

如评论中所述,有问题的代码向 target 元素添加了 transitiontransition-delay,但没有发生转换的状态更改。

仅当由于 :hover:focus 等用户交互或由于在单击时添加 class 等脚本或超时等。因此,转换不适合您的目的,您应该考虑改用 animation。与 transition.

不同,动画可以在页面加载时自动启动

对于在页面加载延迟 1 秒后要模糊的元素,将元素的原始状态设置为未模糊状态,然后将其设置为动画 to 模糊状态,如下面的代码片段所示。

#target{
  height: 100px;
  width: 500px;
  background: url(http://lorempixel.com/500/100);
}
.blur {
  -webkit-animation: blur 0.5s linear forwards;
  -moz-animation: blur 0.5s linear forwards;
  -ms-animation: blur 0.5s linear forwards;
  -o-animation: blur 0.5s linear forwards;
  animation: blur 0.5s linear forwards;
  -webkit-animation-delay: 1s;
  -moz-animation-delay: 1s;
  animation-delay: 1s;
}
.delay {
  -webkit-animation-delay: 1s;
  -moz-animation-delay: 1s;
  animation-delay: 1s;
}
@-webkit-keyframes blur {
  to {
    -webkit-filter: blur(5px);
    filter: blur(5px);
  }
}
@-moz-keyframes blur {
  to {
    -moz-filter: blur(5px);
    filter: blur(5px);
  }
}
@keyframes blur {
  to {
    -webkit-filter: blur(5px);
    -moz-filter: blur(5px);
    filter: blur(5px);
  }
}
<div class="main">
  <div class="wrapper">
    <div id="target" class="blur">This element has a background-image, which should be blured</div>
  </div>
  <div class="content-layer">
    <input id="searchMain" class="animated fadeIn delay">
  </div>
</div>