提问人:daGUY 提问时间:6/5/2014 更新时间:4/18/2019 访问量:7684
CSS 仅在一个方向上模糊(运动模糊)
CSS blur only in one direction (motion blur)
问:
我需要动态模糊页面上的图像,但只能沿一个轴(具体而言)。所以这是我的要求:Y
- 必须“实时”完成(我无法预渲染图像的模糊版本)
- 就像我说的,只在轴上(就像运动模糊,但垂直)
Y
- 需要制作动画
- 应该在 IE9+ 中工作
我的第一个想法是使用一个简单的CSS过滤器:
img {
filter: blur(20px);
}
我可以通过添加过渡 () 来制作动画,但它只会创建高斯模糊,这不是我想要的效果。语法不支持将模糊限制为一个轴之类的东西。transition: filter 0.2s linear
filter: blur(0 10px);
然后我读到模糊滤镜(以及其他滤镜)实际上只是 SVG 滤镜的简写,如果需要,您可以手动编写。因此,我创建了一个名为 SVG 的 SVG,它仅沿轴 () 指定 20px 的模糊:filter.svg
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()
作为 的值。另外,我无法对其进行动画处理,因为该值是 URL 而不是数字,因此不起作用。filter
transition
最重要的是,我认为这两种方法在IE9中都不起作用。
那么:有什么方法可以做我想做的事情吗?我已经研究过将其用作替代方案,但找不到任何仅朝一个方向的模糊示例。canvas
答:
-3赞
Jeff Klein
6/28/2017
#1
如果我对这个问题理解正确,则可以使用 JQuery 完成。
CSS3 确实有它的局限性,而且它在交互值方面非常有限。
Jquery还增加了跨平台的稳定性。
J奎里
$(document).ready(function() {
var $img = $('.image')
$img.hide();
$img.show().animate({
opacity: 100,
paddingTop: '+=80'
}, 500)
});
下面是一个示例,说明它如何与 javacript 一起使用,只需一点 在不透明上鬼混。
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>
评论
0赞
fildred13
6/28/2017
如果这个答案提供了一个简短的例子,说明你认为如何使用javascript可以实现这一点,那将会更有帮助。
0赞
daGUY
4/19/2019
这个答案是不是发错了问题?该问题询问如何将动画垂直模糊应用于图像。答案显示了一个从左向右移动的盒子的例子......?
评论
-webkit-filter: url(filter.svg#blur);
filter: url(filter.svg#blur);
filter
-webkit-filter
filter: url(filter.svg#blur);
-webkit-filter: url(css/filter.svg#blur);