|
Автор |
Сообщение |
Martin
Завсегдатай
Зарегистрирован: 28.07.2009 Сообщения: 623 Откуда: Харьков
|
|
|
|
помогите разобраться. есть функция, которая выводит текст с эфектом пишушей машинки при наведении на объект, и функция, которая удаляет текст, когда курсор мыши покидает объект. События, соответственно - mouseOver и mouseOut. Траьл в том, что, когда посетитель водит курсором на сайте, выбирая что ему нужно и невзначай курсор пересекает быстро данный объект, происходит следущее: mouseOver запускает функцию которая "печатает текст", (! прошу здесь внимания) но неуспев "допечатать" текст, курсор покидает объект и срабатывает mouseOut, который удаляет текст после увода курсора, но текст который продалжает "допечатываться" соответственно не трогает. Пример: текст вывода "телемеханические контроллеры". Если быстро провести курсор через объект, соответственно, часть слова "телемеханич" успела напечататься и удалиться, а оставшаяся часть которая продолжает допечатываться "еские контроллеры" остается. Я ничего кроме settimeout придумать не смог, повесив последнего к функции которая удаляет текст, чтобы удаляла его с задержкой. Но теперь жопа вылезла в другом месте - терь создается впечатление заторможеного сайта, когда курсор попадает и покидает объект и текст удаляется с задержкой. Как было бы хорошо если существовала функция, которая определяла, какое время курсор находится над объектом и только тогда запускала функцию по событию mouseOver |
|
Вернуться к началу |
|
|
Anderson
Завсегдатай
Зарегистрирован: 08.07.2006 Сообщения: 642 Откуда: localhost
|
|
|
|
Martin, можешь сделать глобальный счетчик напечатанных буков. Алгоритм таков:
1) Создаешь таймаут (или интервал, зависимо от твоего механизма) для печатания текста таким образом:
Код: |
timeout = setTimeout(...) |
или
Код: |
interval = setInterval(...) |
и увеличиваешь при печатаньи каждой буквы глобальный таймер printedLettersCount (чтобы знать потом, сколько букв уже напечатано)
Важно, чтобы timeout (или interval) был глобальной переменной.
2) При срабатывании onMouseOut убиваешь первый таймер:
Код: |
clearTimeout(timeout) |
или
Код: |
clearInterval(interval) |
и запускаешь новый таймаут (или интервал), который чистит буквы в зависимости от значения printedLettersCount.
Пример реализации похожего механизма в главной верхней менюшке здесь: http://alexdunai.com (правда, не совсем такой механизм. Писал я, за говнокод строго не судите )
Если быстро наводить или убирать курсор, кнопка не глючит.
Написано чистым JS без JQuery. _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
Martin
Завсегдатай
Зарегистрирован: 28.07.2009 Сообщения: 623 Откуда: Харьков
|
|
|
|
этот скрипт выводит текст с задержками:
Код: |
String.prototype.delayingWrite = function(obj, delay)
{
if (this.length>0)
{
if (typeof obj == 'string') obj = document.getElementById(obj);
obj.innerHTML += this.charAt(0);
s = this.substr(1);
if (s) setTimeout(function(){s.delayingWrite(obj, delay);},delay);
}
} |
обращаться к нему так:
Код: |
mouseOver="'text text text'.delayingWrite('#element',20);" |
вопрос - как правильно обратиться к settimeout внутри функции. его то мне как раз и нужно прикончитьт
|
|
Вернуться к началу |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|