Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   animate и переменная (https://javascript.ru/forum/jquery/29824-animate-i-peremennaya.html)

Кирюха =) 12.07.2012 20:55

animate и переменная
 
Всем привет!Работаю сейчас над созданием небольшой векторной карты...
Но речь пойдет о ней только лишь косвенно. Карта прорисована при помощи замечательной библиотеки Raphael. Объектам Path
привязан обработчик события Hover.
Вот тут по подробней:
-При нажатии заношу в переменную cvet значение изначального цвета.
-Проверяю alert'ом шестнадцетиричный код цвета выводиться нормально.
-Подставляю в функцию animate эту переменную и ничего не происходит :cray:
Что я делаю не правильно? И как в таких случаях находят выход из положения?
obj
		.hover(function(){
		var cvet = this.attr('fill');/*заносим в переменную НАЧАЛЬНЫЙ ЦВЕТ*/
		alert(cvet);/*алертом выводиться этот цвет*/
			this.animate({
				fill: '#52B800'
			}, 300);
		}, function(){
			this.animate({
				fill:cvet /*ставим эту переменную сюда и ничего не происходит*/
			}, 300);
		})

З.Ы. вот ссылка на живой пример http://gerozp.com/map/index.html

zlodeeev 12.07.2012 21:02

"Uncaught ReferenceError: cvet is not defined "

Ребят, пользуйтесь встроенными средствами хрома или же просто проверяйте js код, на каком-нибудь js-lint ресурсе.

переменная cvet у тебя определена только в первой функции от .hover, вынеси её выше

zlodeeev 12.07.2012 22:54

И всё равно накосячил =). Забыл закрыть твою вкладку, сейчас посмотрел - увидел. У тебя же наверно цвет обратно должен был возвращаться. Просто убери var из части

.hover(function(){
		var cvet = this.attr('fill'); //вот в этой строке vfr убери и всё будет как надо
			this.animate({
				fill: '#52B800'
			}, 300);

Кирюха =) 12.07.2012 23:01

все равно не работает
var cvet;
		obj
		.hover(function(){
		var cvet = this.attr('fill');
			this.animate({
				fill: '#52B800'
			}, 300);
		}, function(){
		alert(cvet);
			this.animate({
				fill:cvet				
			}, 300);
		});

zlodeeev 12.07.2012 23:04

Я же тебе говорю - убери var из этого места:

.hover(function(){
		var cvet = this.attr('fill'); //вот в этой строке var убери и всё будет как надо
			this.animate({
				fill: '#52B800'
			}, 300);


короче правильный код вот скопируй и вставь:

.hover(function(){
		cvet = this.attr('fill');
			this.animate({
				fill: '#52B800'
			}, 300);
		}, function(){
		alert(cvet);
			this.animate({
				fill:cvet				
			}, 300);
		})

Кирюха =) 12.07.2012 23:10

Из всего этого я делаю один вывод: если перменной в функции присвоено одно значение, то в другой функции этого значения НЕ БУДЕТ.

Кирюха =) 12.07.2012 23:11

я по другому сделал но сечас попробую твой способ

Кирюха =) 12.07.2012 23:14

Ух ты!!! Ваш код работает. Спасибо =) Я понял свою ошибку

zlodeeev 12.07.2012 23:24

Но будь осторожен, такой код очень нестабилен. Попробуй быстро мышкой по участкам поводить и заметишь, что переменная не успевает меняться и срабатывать для всех полей. Поэтому твой тот способ был лучше, когда ты цвет из массива брал, но с красными ячейками он почему не работал

devote 12.07.2012 23:40

Цитата:

Сообщение от zlodeeev
Я же тебе говорю - убери var из этого места:

с ума сошел чтоль? нафига глобальное пространство мусором засорять? Писать изначально нужно нормально, а не пихать переменные в глобальное пространство.


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