Клуб API Карт

Бага/фича при изменении размера окна с картой

Пост в архиве.

Если карта на всё окно, стили для контейнера карты
#map {position:absolute;top:0;right:0;bottom:0;left:0px;height:100%;}
то при изменении размеров окна по правой и нижним границам появляется-пропадает белая рамка шириной ~18px, а иногда даже оба скролла (браузер фф 24).

Насколько я понял, это из-за того, что суб-контейнеры карты #map ymaps.ymaps-map имеет фиксированный размер, высчитваемый скриптом в процессе изменения размеров окна, поэтому размер изменяется с заметными лагами.

Я попробовал полностью удалить параметры высоты и ширины для элемента #map ymaps.ymaps-map, в результате карта полностью растянулась на весь экран, а остальное осталось на своих местах.

Может есть какой скрытый смысл механизма задавания скриптоп размера контейнера и для этого нельзя использовать стили? Поясните, пожалуйста.

(часто открываю фаербаг и при некотором размере окна рамка появляется постоянно)

 Продолжение здесь

7 комментариев
Алексей Yarrr!
28 января 2016, 01:14

Почему-то кажется, что это баг, связанный с firebug. В хроме с его консолью не повторяется.

Пробовали через консоль firebug слать событие на перерисовку карты? Помогает?

Написав в консоли myMap.redraw();я получил ReferenceError: myMap is not defined, наверное надо что-то другое набирать..

А сам firebug тут не при чём, вот скрин без него, причём в углу даже можно разглядеть специфическую стрелочку, какую фф добавляет в textarea для расширения/сужения. Что она тут делает, непонятно..

Кстати, в хроме 30, тоже есть скроллы, вот только в отличие от мозиллы, после завершения ресайза, графика полностью заполняет страницу (момент на скриншоте пойман до конца завершения ресайза)


Алексей Yarrr!
28 января 2016, 01:15

Напишите в своем коде window.myMap = (объект карты) и тогда можно будет из консоли с ней работать. в т.ч. redraw() дергать.

Только не забудьте после отладки убрать

Добавил в css

.ymaps-map, .ymaps-glass-pane {height:100%!important;width:100%!important;}

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

Товарищи, вы бы завели что-то тикет-подобное, может этот скрипт ещё с тех времён живёт, когда был в ходу ie7-

Очень-очень пожалуйста :)

Sergey Konstantinov
28 января 2016, 01:15
Внутренний контейнер карты имеет фиксированный пиксельный размер для ускорения и оптимизации операций пересчёта координат (получение getComputedStyle - дорогая операция).
Кейс "пользователь изменяет размеры окна и расстраивается медленной реакции" представляется нам гораздо менее важным.

Теперь всё понятно, большое спасибо!

Попробуй для контейнера применить overflow: hidden. Мне помогло