我需要动态模糊页面上的图像,但只能沿一个轴(Y
特别是)。所以这是我的要求:
- 必须“现场”完成(我无法预渲染图像的模糊版本)
- 就像我说的,只在
Y
轴上(像运动模糊,但垂直) - 需要动画
- 应该在 IE9+ 下工作
我的第一个想法是使用一个简单的 CSS 过滤器:
img {
filter: blur(20px);
}
我可以通过添加过渡 ( transition: filter 0.2s linear
) 对其进行动画处理,但它只会创建高斯模糊,这不是我想要的效果。该语法不支持filter: blur(0 10px);
将模糊限制在一个轴上。
然后我读到模糊过滤器(除其他外)实际上只是 SVG 过滤器的简写,如果需要,您可以手动编写。因此,我创建了一个名为 SVG 的名称,它仅沿轴 ( )filter.svg
指定 20px 模糊:Y
0 20
<?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
其用作替代方案,但找不到任何仅在一个方向上的模糊示例。