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 - это вичисленная высота меню, для определения конца прокрутки. |
|
Я недавно писал об этом в своем блоге. Почитайте, что будет непонятно - спрашивайте.
|
Спасибо, вроде, то что нужно.
|
Прочитал. Очень интересный материал. Только ведь у меня остановка не по времени идет, по координатам. Т.е. в данном контексте, ничего нельзя порекомендовать, надо переписовать функцию?
|
Destrifer,
В примерах статьи остановка тоже по координатам (когда 500, то останавливается), а время это только скорость анимации. Я не очень понял вашу задачу, если честно. Вам нужно просто передвинуть меню на определенное значение? |
Андрей Параничев,
Вообщем да, пример можно адаптировать, без проблем. Вопрос лишь, можно ли решить мою задачу в данном контексте (моего кода)? Все просто: 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. извините, если не понятно описал, как смог :). Вообщем проблема-то не вселенского характера. Перепешу код и дело с концом. Просто хотел добраться до истины :). |
Вместо z -= 1;
z = Math.max(z - 10, -s);Не будет перескакивать |
Цитата:
Андрей Параничев - Вам тоже спасибо за внимание к моей проблеме. |
Добавление
Кстати на это:
Цитата:
JS вдруг стал кроссбраузерным :)? |
Часовой пояс GMT +3, время: 19:47. |