Вопрос или проблема
- Я столкнулся с проблемой в Kendo Grid, где белые пробелы появляются при прокрутке в Firefox. В других браузерах сетка работает нормально. Эта проблема начала возникать после реализации функции “Назад к началу”. Похоже, что сетка не может динамически рассчитать свою высоту во время прокрутки, что приводит к проблемам с отображением. Ниже представлена соответствующая часть моего кода:
<kendo-dialog Kendo Grid White Space Issue on Scroll in Firefox after Adding "Back to Top" Feature
="openProjectDialog ? 'Все проекты' : 'Список билетов'"
(close)="onClose()"
[width]="'80%'"
[height]="'80%'"
class="overlapPopup">
<!-- Раздел с текстом в бегающем формате -->
<div class="marquee-wrapper" *ngIf="fullMarqueeText">
<marquee behavior="scroll" direction="left" scrollamount="6"
[innerHTML]="fullMarqueeText">
</marquee>
</div>
<!-- Раздел с содержимым сетки -->
<div *ngIf="!openProjectDialog && !openGridDialog"
#scrollableContent
class="table-grid-outer table-grid-outer-scrollable"
id="scroll">
<div class="grid-container-panel" style="height: 100%;">
<button *ngIf="showScrollTopButton"
class="btn btn-secondary back-to-top"
(click)="scrollToTop()">
<i class="fas fa-arrow-up"></i> Назад к началу
</button>
</div>
</div>
</kendo-dialog>
</div>```
.table-grid-outer-scrollable {
overflow: авто;
max-height: calc(80vh - 100px);
text-overflow: inherit;
}
@ViewChild('scrollableContent', { static: false }) scrollableContent: ElementRef;
ngAfterViewInit() {
$('#scroll').parent().addClass('custom-scroll');
this.addScrollListener();
}
public addScrollListener(): void {
setTimeout(() => {
if (this.scrollableContent) {
this.scrollableContent.nativeElement.addEventListener('scroll', this.onScroll.bind(this));
}
}, 100);
}
public onScroll(): void {
const scrollTop = this.scrollableContent.nativeElement.scrollTop;
this.showScrollTopButton = scrollTop > 300;
}
public scrollToTop(): void {
this.scrollableContent.nativeElement.scrollTo({ top: 0, behavior: 'smooth' });
}
ngOnDestroy(): void {
if (this.scrollableContent) {
this.scrollableContent.nativeElement.removeEventListener('scroll', this.onScroll.bind(this));
}
}
Ответ или решение
Проблема с белыми пространствами в Kendo Grid при прокрутке в Firefox после добавления функции «Назад к верху»
Вам может показаться, что проблема появления белых пространств в Kendo Grid при прокрутке в браузере Firefox вызвана тем, что после добавления функции «Назад к верху», компоненты не динамируют высоко до конца. Данная проблема существует только в Firefox и не наблюдается в других браузерах, что может указывать на специфику реализации рендеринга в этом браузере.
Анализ кода
Рассмотрим предоставленный вами кусок кода:
-
Структура Kendo Dialog и Grid: Вы используете Kendo Dialog, который содержит Kendo Grid, размещенный в зависимом div с классом
table-grid-outer-scrollable
. К этому элементу применяется свойствоoverflow: auto
, что позволяет элементу прокручиваться. -
Настройка высоты: При использовании стиля
max-height: calc(80vh - 100px);
, у вас жестко задана максимальная высота контейнера. Это может привести к проблемам с расчетом высоты в Firefox, особенно при изменениях в DOM (например, при добавлении кнопки «Назад к верху»), что влияет на динамическое обновление высоты вашего грида. -
Слушатели событий скролла: Использование
addScrollListener
, который добавляет событие прокрутки, также может влиять на поведение при скролле. В функцииonScroll
производится логика отображения кнопки «Назад к верху», но нет обработки состояния высоты грида при прокрутке.
Потенциальные решения
-
Обновление размеров: Попробуйте принудительно вызов обновления размеров грида при прокрутке или добавьте событие для изменения высоты, если это необходимо. Вы можете использовать метод
resize
вашего грида внутри обработчика событияonScroll
:public onScroll(): void { const scrollTop = this.scrollableContent.nativeElement.scrollTop; this.showScrollTopButton = scrollTop > 300; // Проверьте вызов resize для компонента Kendo Grid const grid = $('#scroll').data('kendoGrid'); if (grid) { grid.resize(); } }
-
Проверка стиля для разных браузеров: Может иметь смысл использовать специальные CSS стили для Firefox, чтобы убедиться, что он обрабатывает вашу сетку так же, как и другие браузеры. Например:
@-moz-document url-prefix() { .table-grid-outer-scrollable { /* специфичные стили для Firefox */ } }
-
Обратите внимание на z-index и наложение: Иногда белые пространства могут возникать из-за конфликтов z-index и наложений элементов. Проверьте, что все элементы вашего диалога и гридов имеют правильно установленные z-index, чтобы избежать визуальных проблем.
Заключение
По описанной вами проблеме можно сделать вывод, что корректировка обработки высоты Kendo Grid и добавление методов пересчета размера при прокрутке могут помочь устранить проблему возникновения белых пространств в Firefox. Обязательно тестируйте изменения в разных браузерах для получения объективных результатов. Если вышеуказанные решения не сработают, возможно, вам придется рассмотреть возможность обращения в службу поддержки Kendo для более глубокого анализа проблемы.