Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2009, 00:11
Аспирант
Отправить личное сообщение для Destrifer Посмотреть профиль Найти все сообщения от Destrifer
 
Регистрация: 29.11.2008
Сообщений: 64

setTimeout и др.
Имеем функцию которая передвигает меню на значение z, однако двигается оно очень медленно . Уменьшение значения setTimeout не помагает, а увеличениt шага (приращения z), создает проблемы с точным позицированием.
Вроде крутится вариант в голове позицировать по одному приращению, а смещать по другому, но никак не получается сделать правильно.
function my3(){
if(z < -s){clearTimeout(a);return;}
z -= 1;
a=setTimeout('my3()',20);
document.getElementById("menu").style.top = z + 'px';


p.s. s - это вичисленная высота меню, для определения конца прокрутки.
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2009, 00:39
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

Основы программной анимации на JavaScript

Последний раз редактировалось Zibba, 09.02.2009 в 00:46. Причина: Как то не красиво получилось :)
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2009, 00:40
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Я недавно писал об этом в своем блоге. Почитайте, что будет непонятно - спрашивайте.

Последний раз редактировалось Андрей Параничев, 09.02.2009 в 00:41. Причина: Опередили, однако :)
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2009, 10:41
Аспирант
Отправить личное сообщение для Destrifer Посмотреть профиль Найти все сообщения от Destrifer
 
Регистрация: 29.11.2008
Сообщений: 64

Спасибо, вроде, то что нужно.
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2009, 16:05
Аспирант
Отправить личное сообщение для Destrifer Посмотреть профиль Найти все сообщения от Destrifer
 
Регистрация: 29.11.2008
Сообщений: 64

Прочитал. Очень интересный материал. Только ведь у меня остановка не по времени идет, по координатам. Т.е. в данном контексте, ничего нельзя порекомендовать, надо переписовать функцию?
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2009, 17:11
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Destrifer,
В примерах статьи остановка тоже по координатам (когда 500, то останавливается), а время это только скорость анимации.

Я не очень понял вашу задачу, если честно. Вам нужно просто передвинуть меню на определенное значение?
Ответить с цитированием
  #7 (permalink)  
Старый 09.02.2009, 21:30
Аспирант
Отправить личное сообщение для Destrifer Посмотреть профиль Найти все сообщения от Destrifer
 
Регистрация: 29.11.2008
Сообщений: 64

Андрей Параничев,
Вообщем да, пример можно адаптировать, без проблем. Вопрос лишь, можно ли решить мою задачу в данном контексте (моего кода)?
Все просто:
function my3(){
if(z <= -s){clearTimeout(a);return;}
z -= 1;
a=setTimeout('my3()',20);
document.getElementById("menu").style.top = z + 'px';
}

function my4(){
if(z >= 30){clearTimeout(b);return;}
z += 1;
b=setTimeout('my4()',20);
document.getElementById("menu").style.top = z + 'px';
}

Одна функция двигает меню вверх (my3), другая вниз (my4). Высота меню выше высоты страницы, поэтому она вычисляется (s), и как только z достигает порогового значения, меню останавливается. Проблема в том, что при большом шаге (z), когда происходит сранение z и s, меню может передвинутся несколько дальше, чем требуется (z перескакивает через пороговое значение s). Если уменьшить z, проблема исчезает, но скорость перемещения меню становится крайне мала. А дальнейшее уменьшение значения setTimeout, не помогает или исчезает плавность анимации.
p.s. извините, если не понятно описал, как смог . Вообщем проблема-то не вселенского характера. Перепешу код и дело с концом. Просто хотел добраться до истины .
Ответить с цитированием
  #8 (permalink)  
Старый 09.02.2009, 21:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вместо z -= 1;
z = Math.max(z - 10, -s);
Не будет перескакивать
Ответить с цитированием
  #9 (permalink)  
Старый 09.02.2009, 22:02
Аспирант
Отправить личное сообщение для Destrifer Посмотреть профиль Найти все сообщения от Destrifer
 
Регистрация: 29.11.2008
Сообщений: 64

Сообщение от Kolyaj Посмотреть сообщение
Вместо z -= 1;
z = Math.max(z - 10, -s);
Не будет перескакивать
Оригинально, спасибо, работает.
Андрей Параничев - Вам тоже спасибо за внимание к моей проблеме.
Ответить с цитированием
  #10 (permalink)  
Старый 10.02.2009, 19:29
Аспирант
Отправить личное сообщение для Destrifer Посмотреть профиль Найти все сообщения от Destrifer
 
Регистрация: 29.11.2008
Сообщений: 64

Добавление
Кстати на это:
Сообщение от Kolyaj Посмотреть сообщение
Вместо z -= 1;
z = Math.max(z - 10, -s);
Не будет перескакивать
вдруг стал ругаться ie, ставлю обратно z--, работает.
JS вдруг стал кроссбраузерным ?
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще один вопрос по setTimeout setInterval Хранитель Света Общие вопросы Javascript 5 12.03.2009 22:37
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36
Использование метода setTimeout News Общие вопросы Javascript 3 18.09.2008 20:37
Очень простой как даже по мне вопрос по поводу setTimeout & setInterval Хранитель Света Общие вопросы Javascript 5 12.07.2008 20:34
setTimeout object Общие вопросы Javascript 0 12.04.2008 05:26