Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2012, 00:25
Интересующийся
Отправить личное сообщение для Alexanderos Посмотреть профиль Найти все сообщения от Alexanderos
 
Регистрация: 27.09.2010
Сообщений: 29

Странности со скриптом jQuery...
Всем доброго времени суток.

Решил я как-то сделать выдвигающуюся панель навигации для сайта на jQuery. И вроде как неплохо получилось, все работает. Вот только минус большой в том что постоянно эту панель нужно открывать/закрывать при перезагрузке страницы...

Потому решил сделать сохранение состояния в cookies браузера. Идея конечно совсем не нова... и у меня в принципе все работает... за исключением одного маленького неприятного момента. С которым собственно и прошу помочь разобраться...

Почему-то после перезагрузки страницы, когда состояние панели берется из cookies, именно в выдвинутом (активном) положении панели, приходится нажимать на кнопку 2 раза, чтобы панель задвинулась.

После того как панель задвинулась, если страницу не перезагружать, то механизм отрабатывает все верно. Ровно по одному нажатию для движения панели...

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


Собственно JS:
$(document).ready(function(){
	if (($.cookie('cookie_panel_status')) == 'active') {
		$('#btn-panel-slide').addClass("active");
		$("#panel .region-inner").animate({top:"0px"}, 1);
	}
	else {
		$("#panel .region-inner").animate({top:-($("#panel .region-inner").height() - 20) + "px"}, 1);
	}	
	
	$('#btn-panel-slide').toggle(function () {	
		$("#panel .region-inner").animate({top:"0px"}, 500);
		$('#btn-panel-slide').addClass("active");
		$.cookie('cookie_panel_status', 'active', { expires: 7, path: '/' });
	}, function() {
		$("#panel .region-inner").animate({top:-($("#panel .region-inner").height() - 20) + "px"}, 500);
		$('#btn-panel-slide').removeClass("active");
		$.cookie('cookie_panel_status', '', { expires: 7, path: '/' });
	});
});



HTML:
<div id="panel" class="section region">
   <div class="region-inner">
      ...
   </div>
   <a href="#" id="btn-panel-slide" class=""></a>
</div>



Панель неактивна:
[IMG]attachments/jquery/1285d1339014850-strannosti-so-skriptom-jquery-panel-jpg[/IMG]
Панель активна:
[IMG]attachments/jquery/1285d1339014850-strannosti-so-skriptom-jquery-panel_active-jpg[/IMG]
Изображения:
Тип файла: jpg panel.jpg (126.4 Кб, 3 просмотров)
Тип файла: jpg panel_active.jpg (131.0 Кб, 6 просмотров)

Последний раз редактировалось Alexanderos, 07.06.2012 в 00:38.
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2012, 00:50
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Попробуйте сначала объявить функцию, а потом уже вызывать
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2012, 01:17
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Alexanderos,
Попробуйте воткнуть алерты с чтением кукис по событиям чтения и записи куков и глянуть

Вот эта запись не слишком корректна
-($("#panel .region-inner").height() - 20)

я бы сделал так
+(-$("#panel .region-inner").height() +20)

Или так
'-'+($("#panel .region-inner").height() - 20)+'px'

Последний раз редактировалось Deff, 07.06.2012 в 01:19.
Ответить с цитированием
  #4 (permalink)  
Старый 07.06.2012, 11:05
Интересующийся
Отправить личное сообщение для Alexanderos Посмотреть профиль Найти все сообщения от Alexanderos
 
Регистрация: 27.09.2010
Сообщений: 29

Огромное спасибо за советы! Сейчас буду копать дальше.

Оффтоп:
Что-то я забыл как тут картинки нормально размещать? Ну никак они не хотят размещаться в статье.... Делал именно через кнопочку "картинка"... вставляю туда путь после заливки картинки... или тут только с внешнего источника получается разместить?
Ответить с цитированием
  #5 (permalink)  
Старый 07.06.2012, 11:12
Интересующийся
Отправить личное сообщение для Alexanderos Посмотреть профиль Найти все сообщения от Alexanderos
 
Регистрация: 27.09.2010
Сообщений: 29

Сообщение от zebra Посмотреть сообщение
Попробуйте сначала объявить функцию, а потом уже вызывать
Так я же вроде и не вызываю никаких своих функций... а те что есть - это же вроде как безымянные функции... можно поконкретнее?
Ответить с цитированием
  #6 (permalink)  
Старый 07.06.2012, 11:19
Интересующийся
Отправить личное сообщение для Alexanderos Посмотреть профиль Найти все сообщения от Alexanderos
 
Регистрация: 27.09.2010
Сообщений: 29

Сообщение от Deff
Попробуйте воткнуть алерты с чтением кукис по событиям чтения и записи куков и глянуть
Алертами конечно проверял... все нормально сохраняется, но вот именно анимация параметра CSS не происходит с первого раза после перезагрузки страницы... движение панели вверх, то есть строчка которая длиннее... как ни странно после того как нажать 2 раза... потом все начинает работать четко по одному клику в обе стороны, и так пока снова не перезагрузить страницу... то есть тут дело не в куках как мне кажется...
Ответить с цитированием
  #7 (permalink)  
Старый 07.06.2012, 12:26
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Выложите полный рабочий пример.
Ответить с цитированием
  #8 (permalink)  
Старый 14.06.2012, 16:44
Интересующийся
Отправить личное сообщение для Alexanderos Посмотреть профиль Найти все сообщения от Alexanderos
 
Регистрация: 27.09.2010
Сообщений: 29

Сообщение от zebra Посмотреть сообщение
Выложите полный рабочий пример.
Выложил рабочий пример по адресу: http://test.kridom.ru/

Сейчас понял что в Опере вообще бывает не срабатывает cookie, то есть положение панели не запоминается...

Немного изменил код JS, но все равно проблема в необходимости нажать 2 раза чтобы поднять панель осталась:

$(document).ready(function(){
	var panelHeight = $("#panel .region-inner").height();
	var panelTop = panelHeight - 20;

	if (($.cookie('cookie_panel_status')) == 'active') {
		$('#btn-panel-slide').addClass("active");
		$("#panel .region-inner").animate({top: 0 + "px"}, 1);
	}
	else {
		$("#panel .region-inner").animate({top: "-" + panelTop + "px"}, 1);
	}
	
	$('#btn-panel-slide').toggle(function () {	
		$("#panel .region-inner").animate({top: 0 + "px"}, 500);
		$('#btn-panel-slide').addClass("active");
		$.cookie('cookie_panel_status', 'active', { expires: 7, path: '/' });
	}, function() {
		$("#panel .region-inner").animate({top: "-" + panelTop + "px"}, 500);
		$('#btn-panel-slide').removeClass("active");
		$.cookie('cookie_panel_status', '', { expires: 7, path: '/' });
	});
});


Still need help

Последний раз редактировалось Alexanderos, 14.06.2012 в 16:56.
Ответить с цитированием
  #9 (permalink)  
Старый 14.06.2012, 17:03
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Alexanderos
Сейчас понял что в Опере вообще бывает не срабатывает cookie, то есть положение панели не запоминается...
У мну всё запоминает (Наверняка в Настройках брауза куки не включены
Ответить с цитированием
  #10 (permalink)  
Старый 14.06.2012, 17:05
Интересующийся
Отправить личное сообщение для Alexanderos Посмотреть профиль Найти все сообщения от Alexanderos
 
Регистрация: 27.09.2010
Сообщений: 29

Включены как раз.
А два раза не приходится кликать чтобы панель задвинуть вверх из нижнего положения?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамически загружаемая jQuery и jQuery-функции в одном файле 67bytes Общие вопросы Javascript 6 06.03.2013 09:01
Помогите разобраться со скриптом jQuery emere jQuery 13 08.10.2011 09:46
Помогите разобраться со скриптом слайдшоу InviS jQuery 0 23.09.2010 14:47
jQuery jTreeMenu plugin Seafnox jQuery 9 12.01.2010 21:55
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16