Та же проблема, что и у меня, была при инициализации карт Google внутри содержимого вкладки.Это было пару лет назад, поэтому в то время мы использовали вкладки пользовательского интерфейса jquery.Я думаю, вам будет проще показать некоторые фрагменты логики, а не полное решение вашей проблемы.
Проверка видимости родителя активного контента:
- при отображении используйте размеры родительского ИЛИ используйте соотношение сторон в случае видео, карт Google или другого свернутого содержимого
- при невидимости , как правило, повторно активируйте
Некоторые фрагменты логики:
activate: function () {
if (google && this.map.length) {
this.calculateMap();
this.renderMap(this.coords);
}
},
// google maps or your content inside a tab
cacheItems: function (cache, data) {
this.map = this.container.find('.google-maps').eq(0);
this.onParent = this.map.closest('.ui-tabs-panel'); // find the tab panel
},
calculateMap: function () {
var self = this,
parent = this.map.parent(),
w, h, id, el;
if (parent.is(':visible')) {
w = parent.outerWidth(false);
h = w * 9/16;
this.map.css({ width: w, height: h });
} else {
id = this.onParent.prop('id');
el = this.onParent.prevAll().find('a[href=#' + id + ']'); // find the tab trigger
// generic single time event to re-activate
el.one('click', function() {
setTimeout(function() {
self.activate();
}, 200);
}.bind(this)); // rebind the scope
}
},
Теперь вы упомянули, что должны вызывать событие изменения размера на ваших вкладках.Это именно то, что я делаю и здесь.За исключением того, не связывайте это по клику, поскольку это будет продолжаться.Вместо этого инициализируйте ваши вкладки в DOM ready.
Некоторая логика tabs.js:
this.containers = $('.ui-tabs[data-class="tabs"]'); // added my own data-class here in HTML
activate: function () {
var options = $.extend({}, {
heightStyle: 'content'
}, {
activate: function () {
$(window).trigger('resize');
}
});
this.containers.tabs(options);
}
Так что я надеюсь, что моя логика вам ясна, поэтому вы можете применить нечто подобное в своем кодеили что вы уже пробовали.