Conversation
virtualscroll/controller.ts
Outdated
| // TODO в этом методе нужно рассчитывать необходимо ли производить догрузку данных | ||
| } | ||
|
|
||
| export function recalcFromScrollTop(heights: IHeights): IRange { |
There was a problem hiding this comment.
вот это вообще нелогично.
пересчитать от скроллтопа - а передается вся латуха непонятно чего
virtualscroll/controller.ts
Outdated
| } | ||
| } | ||
|
|
||
| export function recalcFromItemHeightProperty(index: number, heights: IHeights): IRange { |
There was a problem hiding this comment.
тут тоже ничего не понятно
ты уверен, что нужен весь IHeight?
и что такое index?
virtualscroll/controller.ts
Outdated
| } | ||
| } | ||
|
|
||
| export function recalcToDirection(direction: IDirection, range: IRange, segmentSize: number, heights: IHeights): IRange { |
There was a problem hiding this comment.
у виртуального скролла нет вообще никакого состояния?
есть же какая то инициализация
а потом его начинают менять
разве не так?
scroll.ts
Outdated
| if (scrollUtils.canScrollToItem(getIndexById(id), this.range, this.heights)) { | ||
| scrollToElement(element); | ||
| } else { | ||
| await this.applyIndexes(VS.recalcFromIndex(getIndexById(id))); |
There was a problem hiding this comment.
а почему scroll вообще должен зависеть от виртуального скроллинга?
кто вызывает ScrollToItem?
когда?
что если он научиться возвращать результат, и вернет false
если не может проскроллить
то кто тогда мог бы сдвигать виртуальный скролл?
There was a problem hiding this comment.
1.Потому что могут вызвать скролл к имеющейся, но не отрисованной записи
2.Прикладники, scrollViewer, календарь и прочие
3.Когда нужно прибить элемент к верхушке вьюпорта
4.Возможно стоит это сделать
scroll.ts
Outdated
| class Scroll { | ||
| protected _beforeMount(options): void { | ||
| if (options.itemHeightProperty) { | ||
| this.applyIndexes(VS.recalcFromItemHeightProperty(options.activeElement, this.heights)); |
There was a problem hiding this comment.
а что с this.heights? это одна из самых интересных штук
когда она меняется? и как?
There was a problem hiding this comment.
интересно, почему называется recalc. если это первый calc?
scroll.ts
Outdated
|
|
||
| class Scroll { | ||
| protected _beforeMount(options): void { | ||
| if (options.itemHeightProperty) { |
There was a problem hiding this comment.
и почему вилка такая? почему способ расчета виртуального скролла зависит от параметра конструктора?
There was a problem hiding this comment.
Это нужно для отрисовки по заранее вычисленным высотам
virtualscroll/controller.ts
Outdated
| } | ||
| } | ||
|
|
||
| export function recalcToDirection(direction: IDirection, range: IRange, segmentSize: number, heights: IHeights): IRange { |
There was a problem hiding this comment.
у виртуального скролла нет вообще никакого состояния?
есть же какая то инициализация
а потом его начинают менять
разве не так?
scroll.ts
Outdated
| } | ||
|
|
||
| private recalcToDirection(triggerName): void { | ||
| this.applyIndexes(VS.recalcToDirection(triggerName, this.range, this._options.segmentSize, this.heights)); |
There was a problem hiding this comment.
ты уверен, что в этом классе нужен this.range?
There was a problem hiding this comment.
я ниже писал, точно ли не нужен никакой класс
вроде как, если был бы класс -то диапазон мог бы храниться в нем
virtualscroll/controller.ts
Outdated
| @@ -0,0 +1,163 @@ | |||
| interface IHeights { | |||
There was a problem hiding this comment.
подробно опиши что это такое и зачем
virtualscroll/interfaces.ts
Outdated
| // Высота вьюпорта | ||
| viewport: number; | ||
| // Высота позиции скролла | ||
| scrollTop: number; |
virtualscroll/controller.ts
Outdated
| * @remark | ||
| * Вызывается при смещении скролла за счет движения скроллбара | ||
| */ | ||
| updateRangeByScrollTop(): IRange { |
scroll.ts
Outdated
| */ | ||
| private _scrollMove(params: IScrollEventParams): void { | ||
| this._scrollTop = params.scrollTop; | ||
| const activeElementIndex = scrollUtils.getActiveElementIndex( |
There was a problem hiding this comment.
я думал, что при scrollMove нужно менять диапазон. а где это?
There was a problem hiding this comment.
Не нужно, это не движения scrollBar.
Это высчитывание активного элемента(чтобы маркер в карточке контрагента при скролле передвигался)
scroll.ts
Outdated
| if (triggerState && this._options.virtualScroll) { | ||
| this._recalcToDirection(triggerName); | ||
| } else { | ||
| this._notifyLoadMore(triggerName); |
There was a problem hiding this comment.
вот тут опять нелогично. 3 подряд _notifyLoadMore
почему бы не сделать так, чтобы виртуальный скролл был всегда
просто размер виртуального окна сделать по всей высоте
тогда не нужно будет расставлять кучу условий
There was a problem hiding this comment.
Возможно эта идея неплохая
e5ced54 to
b55ae8f
Compare
scroll.ts
Outdated
| * @param direction | ||
| * @private | ||
| */ | ||
| private _checkEdgeReached(direction: IDirection): boolean { |
There was a problem hiding this comment.
эту логику нужно перенести в virtualScroll
спрашивать его, где находится виртуальное окно: сверху или снизу?
virtualscroll/controller.ts
Outdated
| return this._range; | ||
| } | ||
|
|
||
| get itemsHeightsData() { |
There was a problem hiding this comment.
Зачем передавать itemsHeightsData а потом получать его?
он же никак не модифицируется и не рассчитывается
в итоге в месте вызова непонятная лишняя связь между модулями
virtualscroll/controller.ts
Outdated
| } | ||
| } | ||
|
|
||
| getPlaceholders(): IPlaceholders { |
There was a problem hiding this comment.
вот это нужно объединять с IRange
scroll.ts
Outdated
| * @param triggerName | ||
| * @param triggerState | ||
| */ | ||
| private _triggerVisibilityChanged(triggerName: IDirection, triggerState: boolean): void { |
scroll.ts
Outdated
| if (index) { | ||
| return new Promise((resolve, reject) => { | ||
| if (this._virtualScroll.canScrollToItem(index)) { | ||
| this._scrollToPosition(this._virtualScroll.itemsOffsets[index]); |
virtualscroll/controller.ts
Outdated
| let {start, stop} = this._range; | ||
|
|
||
| if (segmentSize) { | ||
| const quantity = VirtualScroll.getItemsToHideQuantity(direction, this._range, this._containerHeightsData, itemsHeightsData); |
scroll.ts
Outdated
| * Вычисляет реальные высоты элемента | ||
| * @param container | ||
| */ | ||
| private static getItemsHeightsDataByContainer(container: HTMLElement): IItemsHeights { |
There was a problem hiding this comment.
убрать вычисления в virtualScroll
добавить проверку на range
| */ | ||
| private _viewportResize(params: IScrollEventParams): void { | ||
| this._virtualScroll.resizeViewport(params.viewportHeight, Scroll.getItemsHeightsDataByContainer(this._children.itemsContainer)); | ||
| this._updateTriggerOffset(params.scrollHeight, params.viewportHeight); |
There was a problem hiding this comment.
внутри меняется virtualScroll
почему не сделать это за 1 раз?
| } | ||
|
|
||
| protected _afterMount(): void { | ||
| this.__mounted = true; |
There was a problem hiding this comment.
не понимаю зачем это
неужели какой-то код начинает выполняться раньше, чем этот флаг?
| protected _afterRender(): void { | ||
| if (this._virtualScroll.rangeChanged) { | ||
| this._virtualScroll.updateItemsHeights(this._children.itemsContainer); | ||
| this._virtualScroll.rangeChanged = false; |
| private _viewportResize(params: IScrollEventParams): void { | ||
| this._updateTriggerOffset(params.scrollHeight, params.viewportHeight); | ||
| this._virtualScroll.resizeViewport(params.viewportHeight, this._triggerOffset); | ||
| this._virtualScroll.updateItemsHeights(this._children.itemsContainer); |
| private _viewResize(params: IScrollEventParams): void { | ||
| this._updateTriggerOffset(params.scrollHeight, params.viewportHeight); | ||
| this._virtualScroll.resizeView(params.scrollHeight, this._triggerOffset); | ||
| this._virtualScroll.updateItemsHeights(this._children.itemsContainer); |
No description provided.