Подтвердить что ты не робот

Могу ли я что-нибудь сделать о предупреждении "repaints on scroll" в Chrome для "переполнения: прокрутка" div

В Chrome DevTools, под Rendering, есть опция "Показать потенциальные узкие места прокрутки".

Когда я включил это, некоторые элементы div, которые у меня есть на экране с overflow:scroll, показывают флаг наверху, говорящий "repaints on scroll".

Я не могу найти много документации по этой функции, и я не знаю, могу ли я ее исправить или улучшить, или просто утверждение факта - у div есть контент, и они действительно прокручивают.

4b9b3361

Ответ 1

Вы можете применить этот CSS к div с overflow: scroll или overflow: auto, которые создают узкие места прокрутки.

transform: translateZ(0);
-webkit-transform: translateZ(0);

Это заставит браузер создать новый слой для рисования этого элемента, а иногда и устранить узкие места прокрутки (особенно с помощью Webkit).

Ответ 2

Хотя принятый ответ решает проблему, стоит посмотреть свойство CSS will-change. Это предпочтителен в течение transform: translateZ(0); в последнее время. Вот эта статья объясняет разницу в деталях - https://dev.opera.com/articles/css-will-change-property/

.scroll-container {
  will-change: transform;
}

Ответ 3

Это удивительно заняло несколько дней, чтобы отследить, что происходит, и только потому, что я увидел комментарий одной стороны в конце отчета об ошибке в Chromium bugtracker Issue 514303. Вот что происходит и как это исправить:

Существует понятие, называемое "ЖК-текст", которое, я считаю, означает подпиксельное сглаживание, т.е. "более четкий текст". К сожалению, эта функция несовместима с ускоренной скроллированием прокруткой.

ЖК-текст включен по умолчанию (по крайней мере, на Blink/Webkit?) на всех платформах, которые не являются высокодоходными (большинство обычных мониторов, т.е. вы можете проверить console.log(devicePixelRatio)). С другой стороны, текст ЖК-дисплея отключен по умолчанию на устройствах с высоким уровнем DPI (например, дисплей Retina или большинство мобильных устройств и планшетов), поскольку на платформах с высоким разрешением DPI действительно не нужна функция "более четкого текста".

Поэтому для ускорителя с ускорением с помощью ускорителя это верно: это возможно только на платформе с высоким разрешением, где ЖК-текст отключен.

Однако вы можете принудительно выполнить прокрутку на большинстве мониторов с помощью ускорителя, продвигая элемент overflow:scroll на свой собственный слой, добавив will-change:transform к этому элементу или любой хакерский эквивалент, который заставит элемент переполнения быть родительский собственный слой (например, transform:translateZ(0)). (Обратите внимание, что префиксы поставщиков удаляются.)

tl; dr: Chrome не допускает сглаживание подпикселей и прокрутку gpu; выбрать тот или другой. Подпиксельное сглаживание - это выбор по умолчанию в Chrome (за исключением дисплеев сотовых телефонов и сетчатки, потому что их текст настолько мал, что вам не нужна эта функция, поэтому вы не заметите эту проблему на этих платформах). Переопределите это, заставив элемент в свой собственный слой композитора с will-change:transform (но обратите внимание, что, возможно, ваш текст не будет выглядеть кристально идеальным).

Ответ 4

Нет, вы не можете изменить это, это функция Chrome, которая позволит вам узнать, что написало каждое обновление в окне.

Обновления могут быть разными (прокрутка, mousemove, интервал, requestanimationframe,...).

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

Если (я не знаю), браузер всегда перерисовывает div, если он настроен на прокрутку переполнения, возможно, вы можете сделать JS для установки на overflow hidden, когда вне экрана...

Этот пост говорит о разном макете браузера

Ответ 5

В нижней панели инструментов hrome dev находятся 4 вкладки: консоль, поиск, эмуляция, рендеринг.

Выберите вкладку "Рендеринг", а затем отключите флажок "Показать узкие места прокрутки".