Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.01.2013, 23:36
Аспирант
Отправить личное сообщение для Randomizer Посмотреть профиль Найти все сообщения от Randomizer
 
Регистрация: 21.08.2010
Сообщений: 55

Как сделать выполнение ф-ции только для видимых объектов на экране?
Суть задачи:
на странице есть очень много объектов с каждым из которых выполняется однотипное действие (вычисление), если нажать на кнопку.
Из-за того, что объектов много, а вычисления многоуровневые, то после нажатия на кнопку (которая запускает вычисления) браузер замирает на 5-10 сек (нагружается кучей операций).
Как сделать так, что бы после нажатия на кнопку вычисления выполнялись только над видимыми на данный момент объектами?
По аналогии с ajax загрузкой фоток или товаров по мере пролистывания страницы вниз.
Ответить с цитированием
  #2 (permalink)  
Старый 21.01.2013, 02:26
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Randomizer,
Выложите код - стрёмно предлагать найти пути в минном поле, не видя карты.
Ответить с цитированием
  #3 (permalink)  
Старый 21.01.2013, 08:06
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

В jQuery есть такая штука .is(':visible')
Если нужно на чистом js можно посмотреть реализацию в jQuery
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #4 (permalink)  
Старый 21.01.2013, 11:44
Аспирант
Отправить личное сообщение для Randomizer Посмотреть профиль Найти все сообщения от Randomizer
 
Регистрация: 21.08.2010
Сообщений: 55

:visible полагаю, что не подходит т.к. этот селектор не проверяет на нахождение объектов в области видимости экрана, а проверяет их на видимость в целом (типа display:none).

Ок, вот пример:
$('#starcalc').click(function() {
 $('.object').each(function(){
  $(this).find('.val').clone();
  $(this).find('.rnd').remove();
  ...еще куча операций...
 });
});
Ответить с цитированием
  #5 (permalink)  
Старый 21.01.2013, 11:53
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Randomizer,
Можно нужно закешировать куда то ссылки на $(this).find('.val') и $(this).find('.rnd') тогда будет гораздо быстрее.

Цитата:
Функция getPosition - довольно медленная: она работает с DOM, и ей надо пройти по всей цепочке offsetParent. Выполнять ее каждый раз при движении мыши для поиска текущего акцептора - все равно что нажать на большой-большой тормоз.

Стандартным выходом в такой ситуации является кеширование координат акцепторов, а точнее - их ограничивающих прямоугольников, так чтобы код mouseMove был максимально прост.
Источник: http://javascript.ru/ui/draganddrop - (Drag and drop)
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #6 (permalink)  
Старый 21.01.2013, 14:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от Randomizer
Из-за того, что объектов много, а вычисления многоуровневые, то после нажатия на кнопку (которая запускает вычисления) браузер замирает на 5-10 сек (нагружается кучей операций).
Замирание "лечится" использованием
http://javascript.ru/setTimeout
http://javascript.ru/setInterval
Ответить с цитированием
  #7 (permalink)  
Старый 21.01.2013, 16:06
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Deff
Randomizer,
Выложите код - стрёмно предлагать найти пути в минном поле, не видя карты.
Или ссылку на тестовую страницу, Вероятней всего принцип работы до задачи кривой.
С другой стороны, ежели лень копать прошлое, разбейте body на блоки высотой 400-700px и рассортируйте контент по ним. Пройтись по данным блоком - обнаружить три или менее их, входящих в поле зрения, и работатьь с ними
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
Как сделать чтобы text() брал только текст родителя без текста вложенных контейнеров? Andrey32 jQuery 3 23.05.2009 01:33
Как изменить скрипт, что бы им его можно было использовать для нужной страницы Nick50_70 Общие вопросы Javascript 0 28.04.2009 23:30
Как сделать функцию типа toDataUrl для рисунка в ie6 ? Олег Общие вопросы Javascript 2 14.09.2008 00:06