Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Different height of rows bug #41

Closed
IgorBabkin opened this issue Aug 13, 2015 · 22 comments
Closed

Different height of rows bug #41

IgorBabkin opened this issue Aug 13, 2015 · 22 comments

Comments

@IgorBabkin
Copy link

If height of rows not the same then appears emply space.

@IgorBabkin
Copy link
Author

@IgorBabkin
Copy link
Author

screencast

@NeXTs
Copy link
Owner

NeXTs commented Aug 13, 2015

Привет

Да, потому что в идеале высота строк должна быть примерно одинаковой.
Плагин-же как работает, берёт одну из строк, смотрит её высоту и умножает на кол-во строк. Так и вычисляется высота одного кластера. При незначительных колебаниях высоты такой эффект словить не получится. А у вас же - при инициализации мерки взялись с одной из высокой строки, а в кластере оказалось много маленьких - вот и несостыковки высоты кластера.
Такие, к сожалению, ограничения этого плагина. Высчитывать высоту каждой строки слишком затранто, так что этот вариант я отмёл.

Попробуйте указать параметр blocks_in_cluster: 2, кластеры должны будут заменяться чаще и до пустого места может не дойти.

var clusterize = new Clusterize({   
  scrollId: 'scrollArea', 
  contentId: 'contentArea',  
  blocks_in_cluster: 2    
});

@IgorBabkin
Copy link
Author

Ясно. Впринципе меня все устраивает. В моей задаче будет только одна строка другого размера нежели остальные. А в этом случае все норм работает. Клевый плагин) Спс.

@IgorBabkin
Copy link
Author

Можешь объяснить что такое кластер? Не совсем понял

@NeXTs
Copy link
Owner

NeXTs commented Aug 13, 2015

Кластер это список именно тех тегов которые в данный момент находятся в DOM'e.
Но кластеры также включают в себя разделения на "виртуальные" блоки, выглядит это так:

Кластер:
    Блок:
        тег
        тег
        тег
    Блок:
        тег
        тег
        тег
    Блок: // ←
        тег
        тег
        тег

Отсюда и настройки: rows_in_block, blocks_in_cluster

Когда прокручиваешь список и скролл доходит до начала последнего блока, кластер заменяется на следующий. Так что свойство rows_in_block лучше всего держать больше чем кол-во тегов одновременно видимых на экране. Т.е. если на экране одновременно помещается, скажем, 20 строк, rows_in_block хорошо бы указать 25+

@IgorBabkin
Copy link
Author

а зачем нужны блоки?

@IgorBabkin
Copy link
Author

screencast

@IgorBabkin
Copy link
Author

4.88% прыгают вверх. Я так понимаю в этот момент кластер обновляется?

@NeXTs
Copy link
Owner

NeXTs commented Aug 13, 2015

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

Блоков как таковых в DOM'е нет, они только для вычислений используются.

@IgorBabkin
Copy link
Author

это происходит при таких настройках

  rows_in_block: 25,
  blocks_in_cluster: 4

@NeXTs
Copy link
Owner

NeXTs commented Aug 13, 2015

а вот прыгать не должно. сейчас посмотрю

@IgorBabkin
Copy link
Author

У меня пара вопросов:

  • можно ли кастомный скроллбар каким то образом прикрутить, стилизованный?
  • что делать если нужно повесить обработчики событий (onclick например) на элементе списка?

@NeXTs
Copy link
Owner

NeXTs commented Aug 13, 2015

  • Вообще можно. Я бы посоветовал baron т.к. он оставляет дефолтное браузерное поведение (по скорости) и только стилизирует скроллбар, такой скроллер думаю можно прикрутить легче всего. Но если очень хочется использовать стилизированный плагин который сам влияет на прокрутку, типа malihu custom scrollbar, то это уже нужно менять исходники clusterize, т.к. тот скроллер вообще не выдаёт события scroll а имеет свою реализацию скрола через отрицательный margin. Я уже отвечал на этот вопрос
  • Использовать делегирование событий, смотри faq (How to attach event listener to rows?)

@NeXTs
Copy link
Owner

NeXTs commented Aug 13, 2015

Тебе border-spacing критично?
Из-за него несостыковки между кластерами.

Используй

table{border-spacing: 0;}

Я вот думаю, добавить в плагин стили на обнуление этого свойства или определять его и учитывать в просчетах?

NeXTs added a commit that referenced this issue Aug 13, 2015
@NeXTs
Copy link
Owner

NeXTs commented Aug 13, 2015

А, ладно. Добавил в плагин :)
Обновляйся до 0.12.0

@IgorBabkin
Copy link
Author

Спс большое!) Сейчас вроде все как надо работает.

@IgorBabkin
Copy link
Author

Кстати если tr td заменить на div то вообще никаких проблем. Даже с кардинально разными высотами строк

@IgorBabkin IgorBabkin reopened this Aug 14, 2015
@IgorBabkin
Copy link
Author

@IgorBabkin
Copy link
Author

Хотя нет. Ладно думаю пора закрывать эту тему)

@IgorBabkin
Copy link
Author

Слушай, а ты же впринципе наверно можешь понять что во вьюпорте уже
clusterize-extra-row clusterize-bottom-space

И в этот момент наверно можно подтянуть новый кластер?

@NeXTs
Copy link
Owner

NeXTs commented Aug 14, 2015

Могу, но зачем так делать? Чтоб избавится от блоков?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants