Плавное изменение alpha
Добрый день! Вот есть совсем ламерский вопрос.
Как сделать, чтобы фильтр менял прозрачность изображения не сразу (например, при onmouseover), а плавно, с некоторой задержкой. Т.е., например, навел мышь - и картинка постепенно за 5 секунд стала прозрачной. Спасибо! :) |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
window.onload = function() {
function Animator(node, initialOpacity, speed) {
this.node = node;
this.opacity = this.initialOpacity = initialOpacity;
this.speed = speed;
this.flagIn = false;
}
Animator.prototype = {
bind: function(type, listener) {
if(this.node.addEventListener) this.node.addEventListener(type, listener, false);
//@cc_on this.node.attachEvent('on' + type, listener);
},
process: function(type1, type2) {
var _this = this;
this.bind(type1, function() {
_this.flagIn = true;
_this.fadeIn();
});
this.bind(type2, function() {
_this.flagIn = false;
_this.fadeOut();
});
},
setOpacity: function() {
this.node.style.opacity = this.opacity;
//@cc_on if(@_jscript_version < 5.8) this.node.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + (this.opacity * 100) + ')';
},
fadeIn: function() {
var _this = this;
setTimeout(function() {
if(_this.opacity < 1 && _this.flagIn) {
_this.setOpacity(_this.opacity += 0.1);
_this.fadeIn();
}
}, this.speed);
},
fadeOut: function() {
var _this = this;
setTimeout(function() {
if(_this.opacity > _this.initialOpacity) {
_this.setOpacity(_this.opacity -= 0.1);
_this.fadeOut();
}
}, this.speed);
}
};
new Animator(document.getElementById('animated'), 0.2, 50).process('mouseover', 'mouseout');
};
</script>
<style type="text/css">
#animated {
opacity: 0.2;
}
</style>
<!--[if IE]>
<style type="text/css">
#animated {
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
}
</style>
<![endif]-->
</head>
<body>
<img id="animated" src="" alt="" />
</body>
</html>
|
только этот коду будет действовать исключительно в ИЕ, потому что остальные браузеры не поддерживают фильтра,.. так что надо ставить проверку
|
Приведенный мной код будет работать везде.
|
а точно) сорь незаметил) там же и для других стоит стиль)
|
Отлично, спасибо большое!
|
почему?
А почему скрипт применяется только для одной картинки???
Как сделать чтобы можно было применить такое появление к ряду картинок? |
Очевидно вызывать Animator с id нужной картинки
|
ребята всем привет а у меня ситуация следующая
в движке сайта есть свойство "фотография" а код вызова один.. на странице в итоге если применять скрипт в итоге n-количество фотографий с одним id. ну и работает тогда только скрипт у первой фотографии. нет ли решений каких-то для таких задач или в итоге надо тогда все-таки делать нужное кол-во свойств с соответственно со своми кодами вызова где и будут применяться разные id к картинкам тк здесь например http://www.tigir.com/opacity.htm тоже только по id,здесь тоже http://www.easywebscripts.net/javascript/opacity.php как бы ко всем картинкам применить на странице а у не нужных отменить данную функцию... как-то так... спасибо за помощь |
Идентификатор должен быть уникальным, поэтому и работает только с первым элементом. функция-конструктор Animator принимает ссылку на элемент, полученную неважно каким способом. Получите коллекцию нужных элементом, например, по классу (на форуме есть описание, как это сделать) и выполните new Animator(...) для каждого.
|
| Часовой пояс GMT +3, время: 08:03. |