Ответ 1
Вы можете использовать функцию .animate()
для переменной, которая имеет числовое значение, и анимировать соответственно - вызывать функцию на каждом шаге и назначать это новое числовое значение в качестве свойства радиуса размытия фильтра CSS:)
$(function() {
$({blurRadius: 0}).animate({blurRadius: 10}, {
duration: 500,
easing: 'swing', // or "linear"
// use jQuery UI or Easing plugin for more options
step: function() {
console.log(this.blurRadius);
$('.item').css({
"-webkit-filter": "blur("+this.blurRadius+"px)",
"filter": "blur("+this.blurRadius+"px)"
});
}
});
});
Незначительное обновление: jQuery .animate()
может не совпадать с окончательным значением, как указано в другом ответе ниже. В этом случае всегда безопаснее связывать обратный вызов, который вручную устанавливает радиус размытия в конечное значение. Я модулировал функции так, чтобы их можно было повторно использовать без слишком больших увольнений:
$(function() {
// Generic function to set blur radius of $ele
var setBlur = function(ele, radius) {
$(ele).css({
"-webkit-filter": "blur("+radius+"px)",
"filter": "blur("+radius+"px)"
});
},
// Generic function to tween blur radius
tweenBlur = function(ele, startRadius, endRadius) {
$({blurRadius: startRadius}).animate({blurRadius: endRadius}, {
duration: 500,
easing: 'swing', // or "linear"
// use jQuery UI or Easing plugin for more options
step: function() {
setBlur(ele, this.blurRadius);
},
callback: function() {
// Final callback to set the target blur radius
// jQuery might not reach the end value
setBlur(ele, endRadius);
}
});
};
// Start tweening
tweenBlur('.item', 0, 10);
});
Этот обновленный код можно увидеть в приведенном ниже фрагменте кода.
Важно отметить, что Firefox (FF ≥35 и выше поддерживает unprefix фильтры CSS), IE и Opera не поддерживает для CSS3-фильтров, поэтому нет необходимости использовать -moz-
, -ms-
или -o-
префиксы:)
Смотрите скрипту: http://jsfiddle.net/teddyrised/c72Eb/ (до обновления)
Ниже приведен фрагмент кода ниже для наиболее актуального примера:
$(function() {
// Generic function to set blur radius of $ele
var setBlur = function(ele, radius) {
$(ele).css({
"-webkit-filter": "blur("+radius+"px)",
"filter": "blur("+radius+"px)"
});
},
// Generic function to tween blur radius
tweenBlur = function(ele, startRadius, endRadius) {
$({blurRadius: startRadius}).animate({blurRadius: endRadius}, {
duration: 500,
easing: 'swing', // or "linear"
// use jQuery UI or Easing plugin for more options
step: function() {
setBlur(ele, this.blurRadius);
},
complete: function() {
// Final callback to set the target blur radius
// jQuery might not reach the end value
setBlur(ele, endRadius);
}
});
};
// Start tweening towards blurred image
window.setTimeout(function() {
tweenBlur('.item', 0, 10);
}, 1000);
// Reverse tweening after 3 seconds
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>