Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Плавное изменение alpha (https://javascript.ru/forum/dom-window/1965-plavnoe-izmenenie-alpha.html)

Vladislav0 10.10.2008 21:50

Плавное изменение alpha
 
Добрый день! Вот есть совсем ламерский вопрос.
Как сделать, чтобы фильтр менял прозрачность изображения не сразу (например, при onmouseover), а плавно, с некоторой задержкой. Т.е., например, навел мышь - и картинка постепенно за 5 секунд стала прозрачной.
Спасибо! :)

Octane 10.10.2008 23:41

<!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>

magistr_bender 11.10.2008 18:41

только этот коду будет действовать исключительно в ИЕ, потому что остальные браузеры не поддерживают фильтра,.. так что надо ставить проверку

Octane 11.10.2008 19:23

Приведенный мной код будет работать везде.

magistr_bender 12.10.2008 00:13

а точно) сорь незаметил) там же и для других стоит стиль)

Vladislav0 15.10.2008 20:34

Отлично, спасибо большое!

St.Angel 12.11.2008 17:36

почему?
 
А почему скрипт применяется только для одной картинки???
Как сделать чтобы можно было применить такое появление к ряду картинок?

Zibba 16.11.2008 03:13

Очевидно вызывать Animator с id нужной картинки

namez 21.11.2008 05:50

ребята всем привет а у меня ситуация следующая

в движке сайта есть свойство "фотография"

а код вызова один..

на странице в итоге если применять скрипт в итоге n-количество фотографий с одним id. ну и работает тогда только скрипт у первой фотографии.


нет ли решений каких-то для таких задач или в итоге надо тогда все-таки делать нужное кол-во свойств с соответственно со своми кодами вызова где и будут применяться разные id к картинкам

тк здесь например http://www.tigir.com/opacity.htm
тоже только по id,здесь тоже
http://www.easywebscripts.net/javascript/opacity.php

как бы ко всем картинкам применить на странице а у не нужных
отменить данную функцию...
как-то так...


спасибо за помощь

Octane 21.11.2008 14:59

Идентификатор должен быть уникальным, поэтому и работает только с первым элементом. функция-конструктор Animator принимает ссылку на элемент, полученную неважно каким способом. Получите коллекцию нужных элементом, например, по классу (на форуме есть описание, как это сделать) и выполните new Animator(...) для каждого.


Часовой пояс GMT +3, время: 17:39.