您可以在数值类型的变量上使用.animate()
函数,并相应地进行动画处理 - 在每个步骤中调用一个函数并将该新数值作为CSS过滤器模糊半径属性来赋值 :)
$(function() {
$({blurRadius: 0}).animate({blurRadius: 10}, {
duration: 500,
easing: 'swing',
step: function() {
console.log(this.blurRadius);
$('.item').css({
"-webkit-filter": "blur("+this.blurRadius+"px)",
"filter": "blur("+this.blurRadius+"px)"
});
}
});
});
小更新: 注意到在下面的另一个答案中,jQuery的.animate()
可能无法正确地缓动到最终值。在这种情况下,最保险的方法是链接一个回调函数,手动设置模糊半径到预期的最终值。我已经对这些函数进行了模块化处理,以便可以重复使用而不会出现太多的冗余:
$(function() {
var setBlur = function(ele, radius) {
$(ele).css({
"-webkit-filter": "blur("+radius+"px)",
"filter": "blur("+radius+"px)"
});
},
tweenBlur = function(ele, startRadius, endRadius) {
$({blurRadius: startRadius}).animate({blurRadius: endRadius}, {
duration: 500,
easing: 'swing',
step: function() {
setBlur(ele, this.blurRadius);
},
callback: function() {
setBlur(ele, endRadius);
}
});
};
tweenBlur('.item', 0, 10);
});
您可以在下面的代码片段中看到这个更新后的代码的效果。
需要注意的是,Firefox(FF≥35及以上版本支持未加前缀的CSS滤镜),IE和Opera不支持CSS3滤镜无需使用 CSS3滤镜前缀:)
请参见fiddle:http://jsfiddle.net/teddyrised/c72Eb/(更新之前)
最新示例请参见以下代码片段:
$(function() {
var setBlur = function(ele, radius) {
$(ele).css({
"-webkit-filter": "blur("+radius+"px)",
"filter": "blur("+radius+"px)"
});
},
tweenBlur = function(ele, startRadius, endRadius) {
$({blurRadius: startRadius}).animate({blurRadius: endRadius}, {
duration: 500,
easing: 'swing',
step: function() {
setBlur(ele, this.blurRadius);
},
complete: function() {
setBlur(ele, endRadius);
}
});
};
window.setTimeout(function() {
tweenBlur('.item', 0, 10);
}, 1000);
window.setTimeout(function() {
tweenBlur('.item', 10, 0);
}, 3000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="item">
<p>Sample text that will be blurred.</p>
<img src="http://placehold.it/500x500" />
</div>