Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Перехват перехода (https://javascript.ru/forum/server/7026-perekhvat-perekhoda.html)

Gorshog 11.01.2010 16:38

Перехват перехода
 
Здравствуйте, уважаемые форумчане. У меня возник гигатрудный вопрос.
Дело в том, что на сайте имеется некий интерфейс, динамический, изменяемый, если точнее... несколько ДИВов, которые при наведении меняют цвет заливки случайным образом, постоянно образуя новую цветовую комбинацию. Я хочу, чтобы ее можно было сохранить при переходе в другой пункт меню. Я сделал это при помощи куков. Т.е. при нажатии на кнопочку, комбинация записывается в куки, и подгружается в следующей странице, на которую юзер перешел.
Это не проблема, я уже все сделал. Проблема в другом.
Мне бы хотелось обеспечить ту же функциональность без применения кнопки. Т.е. Юзер поводил по ДИВам, поизменял их цвета, потом вдруг кликнул на другой пункт меню, перешел на соответствующую страницу, а там уже сохраненная комбинация.

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

Может подскажете чего-нибудь интересного? Или вариант с перезаписью, о котором я думал, прокатит?

Заранее спасибо.

subzey 11.01.2010 16:44

По-идее, Вам может помочь onbeforeunload. Вот, только стóит ли? Запись в куку не такая уж и страшная операция, и если при нормальном серфинге она будет встречаться не более десятка раз, то никаких особых провалов в функциональности Вы не получите.

Как вариант, можно записывать эти данные в window.name — это свойство не меняется при переходе со страницы на страницу.

Gorshog 11.01.2010 21:32

Спасибо большое.
Правда я не Жава программер, я флешер. Но про window.name почитал в гугле, так и не понял как ее использовать
Вы не могли бы показать простенький пример записи в нее строки текстовой, и пример вытаскивания от туда?
Был бы очень признателен.

B@rmaley.e><e 11.01.2010 21:34

// запись
window.name = 'я строка';
// чтение
var data = window.name;
alert(data)

Gorshog 11.01.2010 21:52

О! Все знакомые люди )))
Спасибо. Я уже и сам разобрался, и тут же сюда, поделиться радостью. Оказалось обычная переменная.

Можно еще вот такой вопрос задать?
Если я буду эту переменную переписывать раза по 3-4 в секунду в течении, например 10 секунд, от этого ничего перегружаться не будет? Не расточительно ли?
И на сколько это кроссбраузерно?

B@rmaley.e><e 11.01.2010 21:56

Цитата:

Сообщение от Gorshog
Если я буду эту переменную переписывать раза по 3-4 в секунду в течении, например 10 секунд, от этого ничего перегружаться не будет? Не расточительно ли?

:-) Во время анимаций идет перезапись свойств DOM узлов по несколько десятков раз в секунду (а еще оно потом рендерится) + мат. вычисления этих самых значений. И ничего, все пока живы :)

Только я понять не могу, зачем так часто?

Gorshog 11.01.2010 21:59

Ах да. Я тут уже решил так разобраться

function newColor (id) {
	var logodiv = document.getElementById (id);
	if (logodiv) logodiv.style.backgroundColor = getRandomColor (id);
	setTimeout('saveColors()', 1000);
}


Т.е. не нужно будет сохранять данные по 10 раз в секунду.
Тут ожидание 1000 миллисекунд. Если юзер прекратил елозить по ДИВам, то спустя это время все сохранится, иначе каждый раз функция будет заново запускаться и ничего никуда не сохранит. Не успеет просто.

Как? Нормально? Или есть смыл думать в другом направлении?

Вы извините, Жаваскрипт для меня вообще непостяжим. Поэтому хочется убедиться, что я думаю правильно.

Gorshog 11.01.2010 22:01

Цитата:

Сообщение от B@rmaley.e><e
Только я понять не могу, зачем так часто?

Это квадратики цветные (ДИВЫ) по ним если водить курсором, они будут менять цвет. А если юзер психопат и начнет насиловать эти квадратики гоняя по ним курсором? Вот поэтому так часто ))

Michael83 11.01.2010 22:01

Цитата:

Сообщение от Gorshog
Т.е. Юзер поводил по ДИВам, поизменял их цвета, потом вдруг кликнул на другой пункт меню, перешел на соответствующую страницу, а там уже сохраненная комбинация.

ну так повесьте onclick обработчик на пункт меню или какие другие кнопки/ссылки и сохраняйте в куки. это ведь быстро будет и один раз когда надо. хотя если пользователь просто закроет вкладку то не получится тут на самом деле только onbeforeunload поможет.

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

P.S. давно не обновлял вкладку а тут уже оказыватся так ответили :)

B@rmaley.e><e 11.01.2010 22:08

Цитата:

Сообщение от Michael83
ну так повесьте onclick обработчик на пункт меню или какие другие кнопки/ссылки

А может тогда сразу на документ? И эвенты плодить не надо, и кучу узлов обходить.

Цитата:

Сообщение от Gorshog
Это квадратики цветные (ДИВЫ) по ним если водить курсором, они будут менять цвет. А если юзер психопат и начнет насиловать эти квадратики гоняя по ним курсором? Вот поэтому так часто ))

Не думаю, что это хоть сколько-нибудь скажется на скорости работы.


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