Carduelis
@Carduelis
Web-developer, front-end, js, less

Как сделать redraw в браузере?

Disclaimer. Некоторые умники кидают ссылки на let me google for you.
Нужно проверенное кроссбраузерное и кроссплатформенное решение для использования в продакшене, а не ссылки на гугл. Спасибо.


Суть вот какая. Нужно масштабировать в браузере на мобильных устройствах с помощью pinch-to-zoom и rotate svg-карту.
Используя scale3d или scale, в момент увеличения, карта становится растровой, чтобы быстро все обрабатывалось. Но после отпускания пальцев она по-прежнему растровая, если не включить css-transitions или не произвести redraw. Включать css-transitions глупо, потому что все лагает, так как браузер пытается между каждым состоянием сделать анимацию. Но зато она делает redraw.

В итоге я остановился на хаке
$('svg').hide();
$('svg').get(0).offsetHeight();
$('svg').show();


В результате без "мигания" элемента svg становится заново четкой без растровых артефактов увеличения. Есть одно но у этого приема:
1) Не работает в iphone
2) Это грязный хак, который к тому же может привести к дальнейшим проблемам.

Как, собвстенно, сделать этот redraw нормально?
  • Вопрос задан
  • 490 просмотров
Пригласить эксперта
Ответы на вопрос 4
Stalker_RED
@Stalker_RED
Для разных браузеров действуют разные хаки. Люди даже библиотечек уже насоздавали на эту тему.
lmgtfy.com/?q=force+repaint+redraw+reflow
Ответ написан
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
Ответ написан
Комментировать
Ivanq
@Ivanq
Знаю php, js, html, css
Та-дам! У меня уже выражение появилось: Google все знает!
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
После отпускания
включить transitions
сделать scale(текущий скейл + 0.01)
отключить transitions через setTimeout
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы