CSS模糊只在一个方向(运动模糊)



我需要在我的页面上动态模糊图像,但只沿着一个轴(特别是Y)。下面是我的要求:

  • 必须"实时"完成(我不能预渲染图像的模糊版本)
  • 就像我说的,只有在Y轴上(像运动模糊,但垂直)
  • 需要在
  • 动画
  • 应该在IE9+
  • 下工作
我的第一个想法是使用一个简单的CSS过滤器:
img {
    filter: blur(20px);
}

我可以通过添加过渡(transition: filter 0.2s linear)来动画,但它只会创建高斯模糊,这不是我想要的效果。语法不支持像filter: blur(0 10px);这样的东西来限制只在一个轴上模糊。

然后我读到模糊滤镜(除其他外)实际上只是SVG滤镜的简写,如果你想的话,你可以手动编写。所以我创建了一个名为filter.svg的SVG,它只沿着Y轴(0 20)指定了一个20px的模糊:

<?xml version="1.0" standalone="no"?>
<svg width="1" height="1" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
        <filter id="blur">
            <feGaussianBlur in="SourceGraphic" stdDeviation="0 20" />
        </filter>
    </defs>
</svg>

并像这样应用:

img {
    filter: url("filter.svg#blur");
}

这是完美的…但是在Firefox中只能。Safari/Chrome不支持url()作为filter的值。另外,我不能动画它,因为值是一个URL而不是一个数字,所以transition不起作用。

最重要的是,我认为这两种方法都不能在IE9中工作。

那么:是否有任何方法来做我想做的事情?我已经研究过使用canvas作为替代方案,但找不到任何模糊的例子,只在一个方向。

如果我理解的问题是正确的,它可以用JQuery完成。

CSS3确实有它的局限性,它在交互价值方面非常有限。

Jquery还增加了跨平台稳定性。

JQuery

$(document).ready(function() {
  var $img = $('.image')
  $img.hide();
  $img.show().animate({
      opacity: 100,
      paddingTop: '+=80'
  }, 500)
});

下面是一个例子,它如何与javascript一起工作设置不透明度。

function myMove() {
  var elem = document.getElementById("animate");
  var pos = 0;
  var id = setInterval(frame, 5);
  function frame() {
    if (pos == 150) {
      clearInterval(id);
    } else {
      pos++;
      elem.style.left = pos + 'px';
    }
  }
}
#container {
  width: 400px;
  height: 400px;
  position: relative;
  background: yellow;
}
#animate {
  width: 50px;
  height: 50px;
  position: absolute;
  background-color: red;
}
<p>
  <button onclick="myMove()">Click Me</button>
</p>
<div id="container">
  <div id="animate"></div>
</div>

相关内容

  • 没有找到相关文章

最新更新