Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос про оптимизацию
 
 автор: HEBEP   (06.05.2007 в 19:48)   письмо автору
 
 

Есть одна вещь которая меня бесит немного. Приведу пример: есть код который с помощью функции


setTimeout("move()",100)


вызывает функцию move() которая сдвигает на 10рх небольшой рисунок. Почему он идет рывками? Можно это избежать?

   
 
 автор: RMW   (06.05.2007 в 20:04)   письмо автору
 
   для: HEBEP   (06.05.2007 в 19:48)
 

Уменьшить величину сдвига например до 1px.

   
 
 автор: HEBEP   (06.05.2007 в 20:10)   письмо автору
 
   для: RMW   (06.05.2007 в 20:04)
 

Не помогает. Такое ощущение что JS притормаживает. Особено когда пользователь наводит курсор на кнопку и в этот момент всплывает окно с подсказкой. Мол типа "перейти туда сюда".

   
 
 автор: ilyaILF   (06.05.2007 в 20:17)   письмо автору
 
   для: HEBEP   (06.05.2007 в 20:10)
 

Можно попробовать уменьшить интервал со 100 миллисекунд до 40, такую частоту смены кадров человеческий глаз уже перестает различать, по крайней мере так было написано в одной из книг.

   
 
 автор: RMW   (06.05.2007 в 22:33)   письмо автору
 
   для: HEBEP   (06.05.2007 в 20:10)
 

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

   
 
 автор: CNT   (06.05.2007 в 22:45)   письмо автору
 
   для: HEBEP   (06.05.2007 в 20:10)
 

1. Функцию, которая делает какие-то визуальные эффекты через setTimeout, саму нужно запускать через setTimeout с нулём в качестве значения времени. Т.е. если в самой функции move() есть строка рекурсии со значением 10, 40, 100... миллисекунд, то начальный запуск move() сделайте с нулём. Например, выдвижение менюшки по наведению мыши прописывайте не как onmouseover="move ()", а как onmouseover="setTimeout (move, 0)"

2. При движении именно объекта <IMG>, на мой субъективный взгляд, происходит торможение. Если двигать не <IMG>, а <DIV>, в котором прописан этот самый <IMG>, то процесс протекает плавнее. Попробуйте... хотя, может быть, мой вывод и неверен - визуальные эффекты ведь численно не измерить.

3. Если во время движения браузер будет пытаться делать ещё что-то (показывать title у ссылок или писать что-то в статусную строку), то торможение становится ещё более явным. И от этого, увы, не уйти... если только не попробовать перед началом движения закрыть всю страницу прозрачным ДИВ'ом с "верхним" Z-INDEX, а по окончании движения ДИВ "убрать". Причем опять - setTimeout ("функция показа див'а", 0) и в самой фунции показа див'а вызов функции движения снова через setTimeout с нулём... Поэкспериментируйте.

   
 
 автор: shkryab   (06.05.2007 в 22:58)   письмо автору
 
   для: HEBEP   (06.05.2007 в 20:10)
 

Плавной анимации можно достигнуть если прибегнуть к анимации по времени (если я не ошибаюсь то она называеться "морфированная анимация"). Суть заключаеться в том, что если Ваш объект должен пройти за 1сек 50px, то за 500 милисекунд он проходит (50*0.5)px. Это используют для анимации в играх. Можно такое сделать и для web-странички, вот только я думаю оное медленно работать будет. У меня страница тормозит когда я масштабирую "отдоляющиеся" текст и <div>.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования