LINUX.ORG.RU

[HTML5] Бесконечная лента

 


0

2

Прошу подсказать, как лучше всего реализовать эффект бесконечной ленты с использованием HTML5. Есть БД (mysql), оттуда должны выбираться значения, например по тысяче, и представляться в три колонки, которые бесконечно поднимаются вверх. Каждое из значений это ссылка. Может кто знает библиотеку, или какой-нибудь способ сделать так. Если просто пихать все в тысячу дивов, как обычно делаются подобные слайды, то будет сильно тормозить при загрузке, а как сделать динамическую подгрузку в эти ленты, чтобы ничего не сбилось пока не придумал. Всего записей около 500 000.

★★★

По мере прокручивания ленты делать ajax запросы, по определенному количеству записей, например 50, хранить их в хеше, в dom генерить html только для тех записей, которые показываются прямо сейчас. Те записи, которые прокрутились до определенного состояния вверх или вниз удалять из dom. Придется расчитать общую высоту для полосы прокрутки.

Вообще мне сложно представить себя прокручивающим 500000 записей.

special-k ★★★
()
Ответ на: комментарий от xpahos

Причем тут onscroll? ЕМНИП это обработчик скролинга мышью. Мне надо чтобы сама лента бесконечно шла, думал эту анимацию делать на canvas.

mopsene ★★★
() автор топика

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

aol ★★★★★
()
Ответ на: комментарий от special-k

По мере прокручивания ленты делать ajax запросы, по определенному количеству записей

Я тоже над этим думал, но никак не могу найти вменяемого способа сделать саму ленту.

mopsene ★★★
() автор топика
Ответ на: комментарий от mopsene

Мне надо чтобы сама лента бесконечно шла, думал эту анимацию делать на canvas

И думал, что это будет быстрее пачки дивов?
И при чём здесь html5?

wxw ★★★★★
()
Ответ на: комментарий от elnair

Да, то что нужно. Спасибо. Но все равно самое главное либа для плавной, красивой отрисовки ленты.

mopsene ★★★
() автор топика
Ответ на: комментарий от special-k

дрожать будет на удалении из головы списка

надо как-то соорудить клиппинг через divы в divе

ckotinko ☆☆☆
()

Здесь можно и без html5 все решить: динамически создаем нижние блоки, а верхние - удаляем. Информацию о содержимом новых блоков получаем POST-запросами.

Я так когда-то делал выдачу отладочных сообщений на веб-интерфейсе управления железом.

Eddy_Em ☆☆☆☆☆
()

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от wxw

И думал, что это будет быстрее пачки дивов?
И при чём здесь html5?

Ты не понял, видел единственное вменяемое решение в 30 строк на HTML5, ему скармливается пачка дивов и он сам занимается анимацией. HTML5 при том, что это отрисовывается в элементе HTML5, который называется «canvas»;

mopsene ★★★
() автор топика
Ответ на: комментарий от Eddy_Em

событие кручения колеса мыши

Многие не поняли - пользователь в анимации не участвует. Вообще за мышку не держится, просто идет бесконечная лента, куда он иногда может тыкать, чтобы заполнять информационный блок какими-то данными.

mopsene ★★★
() автор топика
Ответ на: комментарий от mopsene

А, дык тогда еще проще: рисуем блок на всю страницу (чтобы никаких скролов не было), в нем распихиваем блоки нашей ленты. Каждые n миллисекунд по таймеру инкрементируем абсолютное положение блоков по вертикали, а как только верхний блок полностью скроется с глаз долой, добавляем снизу очередной блок.

Чтобы не было рывков снизу, добавляем блоки «на всякий случай» в полтора раза больше заранее.

Никаким html5 здесь и не пахнет.

Можно, конечно, еще как вариант вставить SVG или canvas и в нем рисовать. Но бритва Оккама вырезает этот вариант.

Eddy_Em ☆☆☆☆☆
()

Вернее это я хреново объяснил. Самый близкий аналог - титры из звездных войн. Только бесконечная эта лента. Т.е. на экране одновременно 30-40 записей, которые поднимаются вверх и удаляются. А нижние подгружаются.

mopsene ★★★
() автор топика
Ответ на: комментарий от mopsene

Кстати, а в CSS3 случайно нет свойства анимации?

А то было бы еще проще: div'ы перемещаются CSS'кой, а от нас требуется лишь «дозаправлять» ленту. Ну и останавливать ее, если внутри щелкнули.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

рисуем блок на всю страницу

Не вариант, т.к. в ленте есть ссылки, которые изменяют блок справа.

Каждые n миллисекунд по таймеру инкрементируем абсолютное положение блоков по вертикали, а как только верхний блок полностью скроется с глаз долой, добавляем снизу очередной блок.

Это будет плавно и красиво?

mopsene ★★★
() автор топика
Ответ на: комментарий от mopsene

Кстати, во всех браузерах был «косяк» с удалением неиспользуемых элементов (они попросту остаются болтаться в памяти). Так что, со временем браузер станет жрать оочень много памяти и в конце-концов отвалится.

Проверено ☺

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Кстати, во всех браузерах был «косяк» с удалением неиспользуемых элементов (они попросту остаются болтаться в памяти). Так что, со временем браузер станет жрать оочень много памяти и в конце-концов отвалится.

А использование canvas не решит проблему?

mopsene ★★★
() автор топика
Ответ на: комментарий от mopsene

Это будет плавно и красиво. А при абсолютном позиционировании можно просто воткнуть блок-контейнер, который будет себе поверх страницы плавать, не влияя на ее прокрутку.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от mopsene

ХЗ, может быть и решит. Если только браузер не будет хранить результаты всех предыдущих запросов. А сдается мне, эту дыру до сих пор ни в одном браузере не ликвидировали.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Спасибо, еще вопрос. Загружать всю инфу из БД ты советуешь сразу или по мере необходимости? Сразу - проще, но как это повлияет на производительность? Или 500 000 записей не так уж и много?

mopsene ★★★
() автор топика
Ответ на: комментарий от wxw

Вот так и приходится выкручиваться.

Вот только при перезагрузке возникает мелькание.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от mopsene

Загружать всю инфу из БД ты советуешь сразу или по мере

необходимости?

По мере необходимости, конечно. Если делать через вебсокеты, то просто запрашивать очередную запись при формировании нового блока; если же делать через POST-запросы, можно, чтобы сэкономить на количестве запросов, загружать «пачку» данных, а как только она кончится, подгружать новую.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от mopsene

эммм, ну тащемта всякие фейсбуки при скролле делают добавление в DOM новых дивов и получается лента.

xpahos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.