Карта листов не отображается правильно внутри панели вкладок - программирование
Подтвердить что ты не робот

Карта листов не отображается правильно внутри панели вкладок

Я пытаюсь использовать Leaflet.js для отображения карты внутри панели с вкладками из Twitter Bootstrap, но ведет себя странным образом:

Когда я нажимаю на вкладку, содержащую панель, поверх карты отображается серый слой. Если я перетаскиваю и перемещаю карту, я получаю, чтобы видеть другие плитки, но не исходные.

Еще более странно, что если я изменил размер браузера, он внезапно прекратит работу, пока я не перезагружу снова, поэтому, я думаю, это проблема с css, но я не могу найти проблему.

Кроме того, размещение карты вне панели вкладок отлично работает.

Я тестировал в Firefox и Chrome, и у них одинаковая проблема.

Я создал тест в jsfiddle, чтобы увидеть его "вживую": http://jsfiddle.net/jasalguero/C7Rp8/1/

Любая помощь действительно оценена!

4b9b3361

Ответ 1

Это полный взлом из messing с исходным кодом leaflet.js, но он работает (по крайней мере, в jsFiddle) http://jsfiddle.net/C7Rp8/4/

Идея заключается в Google Картах, "изменении размера" или "перерисовке" карты при изменении размера контейнера.

Изменения, которые я сделал, следующие:

добавить id link3 на маленькую вкладку в HTML

<a href="#lC" data-toggle="tab" id="link3">tab3</a>

добавьте слушателя на эту вкладку внутри $(function() {

$("body").on('shown','#link3', function() { 
  L.Util.requestAnimFrame(map.invalidateSize,map,!1,map._container);
});

Строка requestAniMFrame берется из trackResize в leaflet.js

Обновление из комментариев: Привет, я использовал map.invalidateSize(false); вместо L.Util.requestAnimFrame(... и это тоже работает. Просто подумал, что я это укажу. Отличный ответ, хотя! - Herr Grumps

Ответ 2

Bootstrap 3 имеет пользовательские события с именами, поэтому предыдущие ответы будут работать с:

$("body").on("shown.bs.tab", "#link3", function() {
    map.invalidateSize(false);
});

Ссылка: вкладки начальной загрузки