Safari: таинственный кадр после выполнения сложного макета - PullRequest
0 голосов
/ 06 декабря 2018

Вот ситуация для тех, кто разбирается в деталях рендеринга в браузере.Это очень специфично, поэтому я надеюсь, что кто-то захочет помочь мне.


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

В общих чертах, это схемаприложения:

  1. Есть два «слоя» (base & overlay)
  2. При нажатии на страницу происходит переход между ними.
  3. Когда я немного прокручиваюсь в Safari, перед самым переходом, базовый слой прыгает вверх и обратно:

Jitter

Однако, если бы я нарисовал временную шкалу моего кода и где эта ошибка возникает, это выглядит так:

|-- L1 -- R -- L2 -- ❌ -- ✅ -- ...|

Где:

  • L1: код компоновки
  • R: принудительная перекомпоновка
  • L2: код компоновки
  • ❌: неверный кадр
  • ✅: правильный кадр

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

I 'мы создали скрипку с кодом: https://jsfiddle.net/joostlubach/5eruf12k/. Однако по иронии судьбы ошибка там не появляется, вероятно, потому что jsfiddle оборачивает все в контейнер.

Я также добавил ZIPфайл с исходным кодом и снимок экрана Safari и Chrome, иллюстрирующий проблему.

...