Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2012, 20:55
Аватар для Кирюха =)
Профессор
Отправить личное сообщение для Кирюха =) Посмотреть профиль Найти все сообщения от Кирюха =)
 
Регистрация: 27.07.2011
Сообщений: 207

animate и переменная
Всем привет!Работаю сейчас над созданием небольшой векторной карты...
Но речь пойдет о ней только лишь косвенно. Карта прорисована при помощи замечательной библиотеки Raphael. Объектам Path
привязан обработчик события Hover.
Вот тут по подробней:
-При нажатии заношу в переменную cvet значение изначального цвета.
-Проверяю alert'ом шестнадцетиричный код цвета выводиться нормально.
-Подставляю в функцию animate эту переменную и ничего не происходит
Что я делаю не правильно? И как в таких случаях находят выход из положения?
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
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2012, 21:02
Аватар для zlodeeev
Кандидат Javascript-наук
Отправить личное сообщение для zlodeeev Посмотреть профиль Найти все сообщения от zlodeeev
 
Регистрация: 11.07.2012
Сообщений: 113

"Uncaught ReferenceError: cvet is not defined "

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

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

Последний раз редактировалось zlodeeev, 12.07.2012 в 21:10.
Ответить с цитированием
  #3 (permalink)  
Старый 12.07.2012, 22:54
Аватар для zlodeeev
Кандидат Javascript-наук
Отправить личное сообщение для zlodeeev Посмотреть профиль Найти все сообщения от zlodeeev
 
Регистрация: 11.07.2012
Сообщений: 113

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

.hover(function(){
		var cvet = this.attr('fill'); //вот в этой строке vfr убери и всё будет как надо
			this.animate({
				fill: '#52B800'
			}, 300);
Ответить с цитированием
  #4 (permalink)  
Старый 12.07.2012, 23:01
Аватар для Кирюха =)
Профессор
Отправить личное сообщение для Кирюха =) Посмотреть профиль Найти все сообщения от Кирюха =)
 
Регистрация: 27.07.2011
Сообщений: 207

все равно не работает
var cvet;
		obj
		.hover(function(){
		var cvet = this.attr('fill');
			this.animate({
				fill: '#52B800'
			}, 300);
		}, function(){
		alert(cvet);
			this.animate({
				fill:cvet				
			}, 300);
		});
Ответить с цитированием
  #5 (permalink)  
Старый 12.07.2012, 23:04
Аватар для zlodeeev
Кандидат Javascript-наук
Отправить личное сообщение для zlodeeev Посмотреть профиль Найти все сообщения от zlodeeev
 
Регистрация: 11.07.2012
Сообщений: 113

Я же тебе говорю - убери 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);
		})

Последний раз редактировалось zlodeeev, 12.07.2012 в 23:08.
Ответить с цитированием
  #6 (permalink)  
Старый 12.07.2012, 23:10
Аватар для Кирюха =)
Профессор
Отправить личное сообщение для Кирюха =) Посмотреть профиль Найти все сообщения от Кирюха =)
 
Регистрация: 27.07.2011
Сообщений: 207

Из всего этого я делаю один вывод: если перменной в функции присвоено одно значение, то в другой функции этого значения НЕ БУДЕТ.
Ответить с цитированием
  #7 (permalink)  
Старый 12.07.2012, 23:11
Аватар для Кирюха =)
Профессор
Отправить личное сообщение для Кирюха =) Посмотреть профиль Найти все сообщения от Кирюха =)
 
Регистрация: 27.07.2011
Сообщений: 207

я по другому сделал но сечас попробую твой способ
Ответить с цитированием
  #8 (permalink)  
Старый 12.07.2012, 23:14
Аватар для Кирюха =)
Профессор
Отправить личное сообщение для Кирюха =) Посмотреть профиль Найти все сообщения от Кирюха =)
 
Регистрация: 27.07.2011
Сообщений: 207

Ух ты!!! Ваш код работает. Спасибо =) Я понял свою ошибку
Ответить с цитированием
  #9 (permalink)  
Старый 12.07.2012, 23:24
Аватар для zlodeeev
Кандидат Javascript-наук
Отправить личное сообщение для zlodeeev Посмотреть профиль Найти все сообщения от zlodeeev
 
Регистрация: 11.07.2012
Сообщений: 113

Но будь осторожен, такой код очень нестабилен. Попробуй быстро мышкой по участкам поводить и заметишь, что переменная не успевает меняться и срабатывать для всех полей. Поэтому твой тот способ был лучше, когда ты цвет из массива брал, но с красными ячейками он почему не работал
Ответить с цитированием
  #10 (permalink)  
Старый 12.07.2012, 23:40
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от zlodeeev
Я же тебе говорю - убери var из этого места:
с ума сошел чтоль? нафига глобальное пространство мусором засорять? Писать изначально нужно нормально, а не пихать переменные в глобальное пространство.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery animate + переменная Freakmeister jQuery 3 03.05.2012 16:07
animate() тормозит theo_ jQuery 3 21.10.2011 12:48
Переменная после отправки данных lukingnu AJAX и COMET 0 19.03.2011 20:24
jQuery, функция animate(), рекурсия xintrea jQuery 12 03.01.2011 12:33
Переменная как значение функции. Jurasmi Общие вопросы Javascript 7 22.04.2010 12:45