Хорошая (лучшая) подстановка для setInterval или setTimeout - PullRequest
0 голосов
/ 18 мая 2010

У меня есть мастер-страница с некоторыми приятными функциями пользовательского интерфейса (jQuery). Один из этих вариантов - вмешиваться в мои встроенные объекты YouTube (или другие подобные объекты). При каждом событии setInterval в этом случае встроенное видео перестает отображать новые кадры (в течение секунды).

Подробнее: У меня есть «поляроидная» галерея (в заголовке), содержащая только 5 изображений 100x100 (тест: предварительная загрузка не влияет на производительность), и моя галерея будет отображать или скрывать их (постепенное исчезновение / постепенное исчезновение) после промежуток времени. (тест: не анимированное отображение: скрыть или отобразить: блок не влияет на производительность).

После некоторого тестирования, и я пришел к выводу, что это не "анимированные" показ или скрытие изображений, а сам интервал (- после изменения отображения: скрыть или заблокировать результат тот же) , Возможно, это моя "галерея" "функция" на себя ...

 function poladroid() {
     if (!galleryHasFocus) {
         if (galleryMax >= 0) {
             galleryCurrent++;

             if (galleryCurrent > galleryMax) {
                 galleryCurrent = 0;
                 showPictures = !showPictures;
             }
             if (showPictures) {
                 $('#pic-' + galleryCurrent.toString()).show("slow");
             }
             else {
                 $('#pic-' + galleryCurrent.toString()).hide("slow");
             }
         }
     }
     if (!intervalSet) {
         window.setInterval("poladroid()", 3000);
         intervalSet = true;
     }
 }

Это не похоже на то, что моя функция делает очень неловкие вещи, не так ли? Итак, я подумал, что мне нужна более «свободная» функция интервала ... но есть ли вариант для нее?

Оу ... почти забыл упомянуть об этом: FireFox и Chrome работают довольно хорошо; использование IE (что еще) имеет большинство проблем с производительностью.

1 Ответ

1 голос
/ 18 мая 2010

Ничто не заменит setInterval / setTimeout - эти являются единственными способами синхронизации событий в ECMAScript на основе браузера.

Непросто понять проблему real здесь, но я предполагаю, что все, что вы запускаете с помощью setInterval, тяжелее, чем должно быть (как и jQuery) - вы должны попытаться это более эффективно.

Если вы хотите простое в использовании слайд-шоу, посмотрите на http://github.com/oyvindkinsey/JsSlideshow - здесь есть демо здесь

Кстати, не используйте литерал в качестве первого аргумента для setTimeout / setInterval, используйте ссылку на функцию

setInterval(poladroid, 3000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...