API Карт Google v3: розмір вікна InfoWindow неправильний


83

Здається, моє InfoWindow, коли ви натискаєте на піктограму головного на моїх Google Maps v3, не має належного автоматичного розміру до вмісту InfoWindow.

Він дає смуги прокрутки, коли не повинен. Інформаційне вікно повинно мати належний автоматичний розмір.

Будь-які ідеї чому?

За запитом, відповідний JavaScript, який вводить HTML для InfoWindow:

listing = '<div>Content goes here</div>';

ОНОВЛЕННЯ

Цю помилку було усунуто проблемою Google

https://issuetracker.google.com/issues/35823659

Виправлення було реалізовано в лютому 2015 року у версії 3.19 API JavaScript Maps.


краще скопіювати відповідний код у своє запитання. В іншому випадку це питання стає безглуздим, коли код на вашому сайті змінюється.
Джонатан Фінгленд,

Ну, в цьому вся суть насправді. Я розумію, що API Google Maps v3 має передбачати автоматичний розмір незалежно від мого CSS ... і це не так. Але я все
одно

7
Я знаю, що це старе, але на випадок, якщо хтось приїде сюди і спробує все, але все одно має проблему (як у мене): Інформаційна система Windows має максимальну висоту, пропорційну розмірам вашої карти. Це менше, ніж v2. Отже, якщо ви переходите з v2 на v3 і маєте цю проблему, можливо, це пов’язано з цим. Або скоротіть свій вміст, або довшу карту, або поверніться до версії v2.
Cassie

Відповіді:


32

Додайте div у своє інформаційне вікно

<div id=\"mydiv\">YourContent</div>

Потім встановіть розмір за допомогою css. працює для мене. Це передбачає, що всі інформаційні вікна однакового розміру!

#mydiv{
width:500px;
height:100px;
}

Точно так. Один розмір або ви створюєте достатньо класів у своєму css з різними розмірами.
Ілля Саункін

залежно від того, як ви працюєте з вашою інформаційною системою Windows, може бути безпечніше використовувати клас, а не ідентифікатор, щоб уникнути повторення ідентифікаторів, що плавають навколо однієї сторінки, наприклад <div class=\"mydiv\">YourContent</div>і.mydiv{ width:500px; height:100px; }
StackExchange What The Heck

Він працює на настільному ПК, але не на мобільних пристроях (Android) /
user2060451

31

Коротка відповідь: встановіть властивість maxWidth options у конструкторі . Так, навіть якщо встановлення максимальної ширини було не таким, як ви хотіли зробити.

Більш довга історія: Мігруючи карту v2 на v3, я точно побачив описану проблему. Вікна різнилися по ширині та висоті, а деякі мали вертикальні смуги прокрутки, а деякі ні. Деякі з них вбудували <br /> в дані, але принаймні у одного з цим розміром ОК.

Я не вважав властивість InfoWindowsOptions.maxWidth актуальною, оскільки мені було байдуже обмежувати ширину ... але, встановивши її за допомогою конструктора InfoWindow, я отримав те, що хотів, і вікна тепер автоматично розміщуються (вертикально) і показати повний вміст без вертикальної смуги прокрутки. Мені мало сенсу, але це працює!

Див .: http://fortboise.org/maps/sailing-spots.html


2
У випадку, якщо хтось інший намагається встановити maxWidthвідсоток, карти Google розпізнають float як відсоток від батьківського і перетворять його в піксельний еквівалент: оголошення {"maxWidth":0.25}, батьківський елемент має ширину 1000 пікселів, InfoWindow буде мати width: 250px. Я не думаю, що можна змусити ширину InfoWindow залишатися у відсотках (значення maxWidthповинно бути числом, тому {"maxWidth":"25%"}не буде працювати, і {"maxWidth":25%}обробляється модулем 25 невизначеним і викликає синтаксичну помилку).
jacob

Цікаво. В поточній документації Google зазначено, що властивість google.maps.InfoWindowOptions.maxWidth - це "число", і ми вивели одиниці пікселів. Немає жодної причини, чому синтаксичний аналізатор також не міг прийняти десяткове число і інтерпретувати його як дріб ... і це залишити як недокументовану "функцію". За винятком, можливо, здорового глузду.
fortboise

1
Гаразд, +1 за чудову роботу, але чому я завжди опиняюся на цій вітрилі, досліджуючи функціональність gMap.
Білл Бланкеншіп

14
Це могло спрацювати у 2010 році, але не допомагає станом на 2014 рік.
Саймон Іст

1
@Simon Новий рік, нові проблеми ... чи є рішення на цей час?
Філ Купер

25

Ви повинні передати вміст InfoWindow з об'єкта jQuery.

var $infoWindowContent = $("<div class='infowin-content'>Content goes here</div>");
var infoWindow = new google.maps.InfoWindow();
infowindow.setContent($infoWindowContent[0]);

4
Гаразд, це працює чудово, велике спасибі ... Тепер я хочу знати, чому :)
Джеремі Ф.

2
Це одне з найдивніших виправлень, які я коли-небудь бачив. Жоден з інших хаків цього питання для мене не працював, крім цього. Неймовірно.
моноцери

3
З якихось причин API карт не здається overflow: autoна InfoWindow DIV, коли ви передаєте вузли DOM замість рядка. Це вирішує проблему, якщо вміст розміщується лише на 1-2 пікселі. На жаль, це означає, що довший вміст насправді висить з інформаційного вікна, а не додає смуги прокрутки.
Саймон Іст

Хоча це і працює, досить неприємно просити людей включати jQuery на сторінку просто для infoWindow'sправильного відображення. Повна відповідь, чому це працює, вказана в моїй відповіді - jQueryстворюється відокремлене дерево DOM, яке змушує правильно відтворювати вміст і точно визначати його розмір до спроби Google розмістити його infoWindowна карті
Адам,

22
.gm-style-iw{
    height: 100% !important;
    overflow: hidden !important;
}

це працює для мене


Це не є відмінним рішенням , як і будь-якого контент , який є більше , ніж інформаційне вікно буде відрізано і приховано.
Саймон Іст

Не ідеально підходить для вмісту різної довжини, але мій вміст майже однаковий для кожного вказівника із застосуванням ширини! Важливо та висоти!
Джимбо Джонс,

22

ВИДАВАНО (виділитись): Повірте мені, зі ста інших відповідей на це питання це єдино правильний, який також пояснює ЧОМУ це відбувається

Гаразд, отже, я знаю, що ця тема стара і має тисячу відповідей, але жодна з них не є правильною, і я відчуваю потребу опублікувати правильну відповідь.

По-перше, вам ніколи не потрібно вказувати width'sабо height'sщось робити, щоб ваше infoWindow відображалося без смуг прокрутки, хоча іноді ви можете випадково запустити його, роблячи це (але це врешті-решт не вдасться).

По-друге, в API Карт Google infoWindow's немає помилки прокрутки, просто дуже важко знайти правильну інформацію про те, як вони працюють. Ну ось воно:

Коли ви скажете API Карт Google відкритись у вікні infoWindow так:

var infoWindow = new google.maps.InfoWindow({...});
....
infoWindow.setContent('<h1>Hello!</h1><p>And welcome to my infoWindow!</p>');
infoWindow.open(map);

На всі наміри і цілі, Google Maps тимчасово розміщує a divв кінці вашої сторінки ( насправді це створює detached DOM tree- але це концептуально легше зрозуміти, якщо я кажу, що ви уявляєте, що ви divзнаходитесь в кінці вашої сторінки ) із вмістом HTML, який ви вказано. Потім він вимірює той div (що означає, що в цьому прикладі будь-які правила CSS у моєму документі, до яких застосовуються теги, h1і pтеги будуть застосовані до нього), щоб отримати його widthі height. Потім Google бере це div, призначає йому вимірювання, які він отримав, коли його було додано до вашої сторінки, і розміщує на карті у вказаному вами місці.

Ось де проблема трапляється у багатьох людей - у них може бути HTML, який виглядає так:

<body>
 <div id="map-canvas"><!-- google map goes here --></div>
</body>

і з будь-якої причини CSS, який виглядає так:

h1 { font-size: 18px; }
#map-canvas h1 { font-size: 32px; }

Ви бачите проблему? Коли API намагається зробити вимірювання для вашого infoWindow(безпосередньо перед відображенням його), то h1частина вмісту матиме розмір 18px(так як тимчасове «вимір ДІВ» додаються до тіла), але коли API фактично поміщає infoWindowна на карті, #map-canvas h1селектор матиме перевагу, завдяки чому розмір шрифту буде значно відрізнятися від того, що був, коли API вимірював розмір, infoWindowі в цьому випадку ви завжди отримуватимете смуги прокрутки.

Можуть бути і дещо інші відтінки з конкретної причини, чому у вас є смуги прокрутки infoWindow, але причина цього полягає в цьому:

Ті самі правила CSS повинні застосовуватися до вмісту всередині вашого, infoWindow незалежно від того, де фактичний елемент HTML відображається в розмітці. Якщо цього не сталося , то ви гарантовано отримаєте смуги прокрутки у своєму інформаційному вікні

Тож, що я завжди роблю, це приблизно так:

infoWindow.setContent('<div class="info-window-content">...your content here...</div>');

і в моєму CSS:

.info-window-content { ... }
.info-window-content h1 { .... }
.info-window-content p { ... }
etc...

Тому незалежно від того, де API додає його вимірювання div- до закриття bodyабо всередині a #map-canvas, правила CSS, що застосовуються до нього, завжди будуть однаковими.

EDIT RE: Шрифтові сім’ї

Здається, Google активно працює над проблемою завантаження шрифтів (описана нижче), і функціональні можливості нещодавно змінилися, тому ви можете або не бачити завантаження шрифтів Roboto, коли ваш файл infoWindowвідкривається вперше, залежно від версії API, який ви використовуєте. Існує відкритий звіт про помилку (хоча в журналі змін цей звіт про помилку вже був позначений як виправлений), який ілюструє, що Google все ще відчуває труднощі з цією проблемою.

Ще одне: ПЕРЕГЛЯДАЙТЕ СВОЇ ШРИФТОВІ РОДИНИ !!!

В останньому втіленні API, Google намагався бути розумним і обертати його вміст infoWindow чимось, на що можна націлити за допомогою селектора CSS - .gm-style-iw. Людям, які не розуміли правил, які я пояснив вище, це насправді не допомогло, а в деяких випадках ще більше погіршило ситуацію. Полоски прокрутки майже завжди з'являться під час першого infoWindowвідкриття, але якщо ви відкриєте будь-яку infoWindowще раз, навіть із таким самим вмістом, смуги прокрутки зникнуть. Серйозно, якби ви не були розгублені до цього, ви збилися з розуму. Ось що відбувалося:

Якщо ви подивитеся на стилі, які Google завантажує на сторінку, коли завантажується API, ви зможете побачити це:

.gm-style {
     font-family: Roboto,Arial,sans-serif
 ...
}

Гаразд, тому Google хотів зробити карти більш послідовними, завжди змушуючи їх використовувати Robotoсімейство шрифтів. Проблема полягає в тому, що для більшості людей до того, як ви відкрили infoWindow, браузер ще не завантажив Robotoшрифт (оскільки ніщо інше на вашій сторінці не використовувало його, тому браузер досить розумний, щоб знати, що його не потрібно завантажувати цей шрифт). Завантаження цього шрифту не відбувається миттєво, хоча це дуже швидко. Коли ви вперше відкриваєте файл infoWindowі API додає його divразом із вашим infoWindowвмістом до тіла, щоб зробити його вимірювання, він починає завантажувати Robotoшрифт, але ваші infoWindow'sвимірювання проводяться, і вікно розміщується на карті перед Robotoзакінченням завантаження. Результатом, досить часто, булоinfoWindowчиї вимірювання проводились, коли його вміст відображався за Arialдопомогою sans-serifшрифту, але коли він відображався на карті (і Robotoзавантаження закінчувався), його вміст відображався шрифтом іншого розміру - і вуаля - смуги прокрутки з’являються вперше ви відкриваєте infoWindow. Відкрийте точно те ж infoWindowсаме вдруге - після цього Robotoфайл буде завантажений і буде використаний, коли API проводить вимірювання infoWindowвмісту, і ви не побачите смуг прокрутки.


Деякі чудові деталі там, Адам, і так, я виявив подібні речі до вас. Однак помилка, про яку повідомляється Google , насправді все ще трапляється, навіть із системними шрифтами та відсутністю нащадкових селекторів CSS. Дивіться цей приклад (має смугу прокрутки в Chrome 40 Win).
Саймон Іст

@Simon - ви маєте рацію, посилання, яке ви надіслали, є помилкою (надзвичайно крайовий випадок, але помилка тим не менше). Я вважаю, що> 98% випадків, коли люди повідомляють про свою інформацію, яку мають Windows, і вони не знають, чому - це через проблеми, розглянуті у цій відповіді.
Адам

Адам. Велике спасибі за надання цієї відповіді. Ви врятували мені купу непотрібних злому!
Абрам

13

Я спробував кожну з перерахованих відповідей. Жоден з мене не працював. Це нарешті виправило це ПОСТІЙНО. Код, який я успадкував, мав DIVобгортку навколо всіх записів <h#>і <p>. Я просто змусив деякий "стиль" у тому самому DIV, беручи до уваги бажану максимальну ширину, вкинути зміну висоти рядка про всяк випадок (чуже виправлення) та свою власну white-space: nowrap, яка потім зробила автоматичне переповнення, щоб зробити правильні налаштування. Без смуги прокрутки, без усічення та без проблем!

html = '<div class="map-overlay" style="max-width: 400px;
                                        line-height: normal;
                                        white-space: nowrap;
                                        overflow: auto;
                                       ">';

7
Ось цей! Я без успіху працював через усі відповіді, поки не потрапив сюди. У моєму випадку саме white-space: nowrapце магло магію - інші стилі були непотрібні. На здоров’я!
Xavier Holt

Це справді спрацьовує, однак, деякі інформаційні вікна потрібно було натискати не раз, хоча ... моє остаточне рішення полягало в поєднанні цієї відповіді з концепцією Concept211 шляхом додавання font-family: sans-serif !important; font-weight: normal !important;до CSS.
Sparky

На жаль, якщо у вас є довгі рядки, вони замість обгортання будуть обрізані. Не ідеальне рішення, якщо ви не знаєте, що всі ваші рядки короткі.
Саймон Іст

10

Я знаю, що це стара тема, але я щойно зіткнувся з тією ж проблемою. Я мав <h2>і <p>елементи у вікні InfoWindow, і вони обидва мали нижнє поле. Я видалив поля та розмір вікна InfoWindow правильно. Жодне з інших запропонованих виправлень не спрацювало. Я підозрюю, що розрахунок розміру InfoWindow не враховує поля.


1
У мене була ця проблема, і жодне з інших виправлень не працювало, але це спрацювало. Дякую :)
Ian Dunn

Це стосується всіх полів, що використовуються всередині вікна.
ZMorek

2
У мене все ще були проблеми, але я просто обернув усе в " <div style='overflow:hidden;'></div>Виглядає добре".
ZMorek

10

Збираюся додати свою відповідь до списку, оскільки НІхто з них не вирішив моєї проблеми. У підсумку я завершив обгортання свого вмісту в div, присвоївши цьому div клас і вказавши min-widthdiv, І вказавши maxWidthв infoWindow, І обидва вони мали бути однакового розміру, інакше ширина або висота були б переповнені на коробках із неправильною кількістю вмісту.

Javascript:

// Set up the content for the info box
var content = "<div class='infowindow-content'>" + content + "</div>";

// create a map info box
var infoWindow = new google.maps.InfoWindow({
    maxWidth: 350,
    content: content
});

CSS:

div.infowindow-content {
    min-width: 350px;
}

2
Налаштування min-widthвмісту було єдиним, що працювало і у мене. Не потрібно було встановлювати значення maxWidthу вікні infoWindow.
Mark Parnell

1
@MarkParnell = не забудьте ретельно протестувати. Я стикався з проблемами, коли у мене було більше певної кількості тексту на заданій ширині! Якщо ви знаєте, яким буде вміст, то жодного великого :)
Джен

Щиро дякую .. це теж мені допомогло. У мобільному поданні я дав maxWidth: 350. все-таки він приймав деяке випадкове значення. за допомогою мінімальної ширини це чудово працює.
DShah

8

Я спробував усі ці рішення, і жодне не працювало. Після деяких спроб і помилок я це зрозумів.

<style type="text/css">
#map_canvas {
    line-height:normal;
}
</style>

Встановити висоту рядка: нормально для div canvas canvas.


так! висота лінії - це те, що і мені це зафіксувало. більше нічого не вийшло. зокрема, у мене в таблиці стилів була встановлена ​​висота рядка {line-height: 1.3; }. я змінив його на {line-height: 1.3em}, і це вирішило проблему.
tbradley22

або по черзі ви можете просто встановити висоту рядка div контейнера карти як нормальну, як зазначено вище.
tbradley22

У #map_canvasGoogle Maps v3 немає такого, що я бачу. Це має бути зі старого v2.
Саймон Іст

@Simon #map_canvas- це div, який ви використовуєте для карти. Це може бути будь-яке ім’я, яке ви хочете.
Нік

На жаль, це не допомагає. Ця скрипка все ще відображає смугу прокрутки в Chrome: jsfiddle.net/simoneast/dckxp62o
Саймон Іст

8

Здається, проблема в веб-шрифті Roboto.

Інформаційне вікно відображається із вбудованими властивостями ширини та висоти на основі наданого вмісту. Однак він не обчислюється з тим, що веб-шрифт вже відтворений / завантажений. Як тільки шрифт буде відтворений ПІСЛЯ друку всієї карти на екран, це призведе до появи смуг прокрутки через властивості "overflow: auto", вбудовані всередину DIV вікна.

Рішення, яке я знайшов для роботи, - це обернути вміст у DIV, а потім застосувати CSS, щоб замінити веб-шрифт:

.gmap_infowin {
    font-family: sans-serif !important;
    font-weight: normal !important;
}

<div class="gmap_infowin">Your info window content here.</div>

це рішення працює для мене. Також приховування прокрутки працює: .gm-style-iw {overflow: hidden! Important;}, але це приховає частину вмісту в infoWindow
уявне

+1 так! Але я поєднав цю відповідь з user2656824 .
Sparky

+1, оскільки це єдина відповідь, яка, здається, нарешті визнає той факт, що це пов’язано з проблемами шрифтів Roboto. я б не здивувався, якби інші шрифти також відображалися неправильно. проблема в тому, що .gm-style-iw обчислює крихітно трохи меншу висоту, ніж потрібно, можливо, через округлення поплавця. справді єдиним розумним варіантом є невдалий .gm-style-iw {overflow: hidden! important;}. звичайно, це стає марним, коли вам справді доведеться прокручувати
user151496

Шрифт Roboto дійсно з'являється , щоб викликати це питання іноді , але це відбувається також з Arial і по замовчуванням шрифтів. Якщо ви подивитесь на цю скрипку із запропонованим виправленням у Chrome 38 у Windows, вона все ще має неприємну смугу прокрутки: jsfiddle.net/simoneast/dckxp62o/2
Саймон Іст

5

Досить смішно, хоча наступний код виправить смугу прокрутки WIDTH:

.gm-style-iw
{
    overflow: hidden !important;
    line-height: 1.35;

}

Це потрібно для виправлення смуги прокрутки ВИСОТА:

    .gm-style-iw div
    {
        overflow: hidden !important;
    }

EDIT: Додавання пробілів: nowrap; будь-який із стилів може виправити проблему з інтервалом, яка, здається, затримується при видаленні смуг прокрутки. Чудовий момент Натане.


Думаю, мою проблему спричинило загортання тегу h4. Коли я додав вашу пропозицію, вона видалила смуги прокрутки, але внизу вікна було трохи крихітки. Коли я додав пробіл: nowrap; до h4 все стало краще. Дякую!
Nate Bunney

4

Це працює для мене. Покладіть divвsetContent

sh_map.infoWindow.setContent([
  '<div id=\"mydiv\">',
  'Your content goes here',
].join(''));

Потім додайте цей CSS на свою сторінку:

<style type="text/css">
#map-canvas {
 text-align: center;
 vertical-align: middle;
}
#mydiv {
 font-family: "Comic Sans MS", cursive;
 font-size: 10px;
 border-top-width: 0px;
 border-right-width: 0px;
 border-bottom-width: 0px;
 border-left-width: 0px;
 border-top-style: none;
 border-right-style: none;
 border-bottom-style: none;
 border-left-style: none;
 letter-spacing: normal;
 text-align: center;
 vertical-align: middle;
 word-spacing: normal;
}
</style>

Наприклад, див. Http://www.student-homes-northampton.co.uk ; натисніть посилання під домашніми фото, щоб відобразити карту Google.


29
дякую, лише коли я встановив шрифт comic-sans, це почало працювати.
брет

4

Це повністю вирішило мою проблему:

.gm-style-iw {
    overflow: visible !important;
    height: auto !important;
    width: auto !important;
}

Це найближча відповідь, яка спрацювала для мене. Замість автоматичної висоти я натомість додав мінімальну висоту.
Пол

3

Я мав ту саму проблему з IE і спробував багато виправлень, описаних у цих відповідях, але не зміг надійно видалити вертикальні смуги прокрутки в IE.

Найкраще для мене працював перехід на фіксований розмір шрифту всередині інформаційного вікна - 'px' ... Я використовував ems. Виправивши розмір шрифту, мені більше не потрібно було чітко заявляти про ширину або висоту інформаційного вікна, і смуги прокрутки назавжди зникли.


Це іноді допомагає, але не надійно усуває проблему. Якщо ви переглядаєте цю скрипку в Chrome 38 у Windows, вона все ще має потворну смугу прокрутки: jsfiddle.net/simoneast/dckxp62o/3
Саймон Іст

2

Також важливою є висота контейнера карти. Якщо до малого infoWindow завжди буде висота 80px. В іншому випадку maxWidthі #innerDivвиправлення працює як шарм.


Точно, я не думаю, що це будь-який фіксований розмір, але справа в тому, що якщо карта недостатньо велика (у цьому випадку висота), то інформаційне вікно не змінить розмір, щоб обернути наш вміст. Спробуйте збільшити карту і перевірте ще раз
spuas

ЦЕ тут найбільш правильна відповідь. Занадто маленька карта зазвичай є причиною проблем розміру інформаційного вікна. Якщо ви хочете перевірити теорію, просто огляньте контейнер карти та збільште ширину та висоту.
pim

На жаль, все ще є проблеми навіть із відповідною великою картою.
Саймон Іст

2

Якщо нічого іншого, спробуйте додати вміст після відкриття вікна. Це повинно змусити його змінити розмір.

infoWindow = new google.maps.InfoWindow()
infoWindow.open(map, marker)
infoWindow.setContent(content)

0

Використовуйте подію domready та знову відкрийте інформаційне вікно та покажіть прихований вміст після того, як подія domready активується двічі, щоб переконатися, що всі елементи dom завантажені.

// map is created using google.maps.Map() 
// marker is created using google.maps.Marker()
// set the css for the content div .infowin-content { visibility: hidden; } 

infowindow = new google.maps.InfoWindow();    
infowindow.setContent("<div class='infowin-content'>Content goes here</div>");
infowindow.setPosition(marker.getPosition());
infowindow.set("isdomready", false);
infowindow.open(map);   

// On Dom Ready
google.maps.event.addListener(infowindow, 'domready', function () {
    if (infowindow.get("isdomready")) {
        // show the infowindow by setting css 
        jQuery('.infowin-content').css('visibility', 'visible');               
    }
    else {
        // trigger a domready event again.
        google.maps.event.trigger(infowindow, 'content_changed');
        infowindow.set("isdomready", true);
    }
}

Я спробував просто виконати setTimeout (/ * show infowin callback * /, 100), але іноді це не спрацьовувало, якщо завантаження вмісту (тобто зображень) тривало занадто довго.

Сподіваюся, це працює для вас.


0

У мене була та сама проблема, особливо помітна, коли мій <h2>елемент перейшов у другий рядок.

Я застосував клас до a <div>у вікні infoWindow і змінив шрифти на загальний системний шрифт (у моєму випадку Helvetica) на веб-шрифт @ font-face, який він використовував раніше. Питання вирішено.


На жаль, це не надійне виправлення. Відомо, що проблема також виникає з Arial та іншими стандартними шрифтами.
Саймон Іст


0

Додайте a min-heightдо елемента класу infoWindow.

Це вирішить проблему, якщо ваші infoWindows мають однаковий розмір.

Якщо ні, додайте цей рядок jQuery до вашої функції натискання для інформаційного вікна:

//remove overflow scrollbars
$('#myDiv').parent().css('overflow','');

Ви на правильному шляху. Мінімальна висота infoWindow не допоможе вам, оскільки цей DIV міститься в переповненому DIV. Тож встановлення мінімальної висоти змусить її прокручуватись кожного разу.
Clowned247

Дивлячись на структуру DOM, насправді це ДІД класу infoWindow, якому потрібно видалити переповнення. Мій код виглядає приблизно так: infoCallBack = функція infoCallback (infowindow, marker) {return function () {/ * сюди йде код для відображення вікна, потім виправляється переповнення next * / setTimeout (function () {$ ('. Infowindow') .parent (). parent (). css ('overflow', '');}, 25); }} Що в основному запускає виправлення інформаційного вікна через 25 мс, достатньо часу для його відображення.
Clowned247

0

Я не міг змусити його працювати будь-якою формою чи формою, я включав 3 коди в коробку. Я загорнув їх у зовнішній div, з ширинами та висотами, встановленими правильно, і нічого не вийшло.

Врешті-решт я виправив це, встановивши div як абсолютний лівий верх, а потім перед div, я встановив два зображення, одне 300px в ширину і 1px у висоту, одне 120px у висоту і 1px в ширину, прозорого gif.

Тоді він правильно масштабувався!

Це потворно, але це працює.

Ви також можете зробити одне зображення та встановити zindex, як я очікую, або навіть лише одне зображення, якщо у вашому вікні немає взаємодії, але воно містило форму, отже, це не було варіантом ...


0

Я думаю, що така поведінка пов’язана з якимось стилем css у зовнішньому контейнері, у мене була та ж проблема, але я вирішив це за допомогою внутрішнього div та додавши до нього деяке заповнення, я знаю, що це дивно, але це вирішило проблему

<div id="fix_height">
    <h2>Title</h2>
    <p>Something</p>
</div>

І в моєму style.css

div#fix_height{
    padding: 5px;
}

0

У мене був вбудований елемент (тег) безпосередньо всередині, divіз style="overflow:auto"[...загорнутим pтегом у тег, і зафіксований.

Схоже, будь-який вбудований елемент, який не вкладений у елемент блоку безпосередньо всередині інформаційного вікна, спричинить це.


0

Моя відповідь полягає в тому, щоб додати слухача (за допомогою addListenerOnce), щоб перевірити, чи додано infoWindow до DOM, а потім знову відкрити infoWindow (не потрібно його закривати).

// map, marker and infoWindow code, we'll call them 
// myMap, myMarker and myInfoWindow

myInfoWindow.open(myMap, myMarker);
google.maps.event.addListenerOnce(myInfoWindow, 'domready', function(){
                myInfoWindow.open(myMap, myMarker);
            });

0

Додавання наступного до мого CSS зробило для мене фокус:

white-space: nowrap;

Це видалить обгортку на довгих лініях. Я не думаю, що це підходяще рішення для багатьох людей.
Саймон Іст

0

Просто підсумуй усі рішення, які працювали для мене у всіх браузерах:

  • Не використовуйте поля всередині інформаційного вікна, лише заповнення.
  • Встановіть максимальну ширину для інформаційного вікна:

    this.infowindow = new google.maps.InfoWindow({ maxWidth: 200 });

  • Оберніть вміст інформаційного вікна

    <div style="overflow:hidden;line-height:1.35;min-width:200px;">*CONTENT*</div>

    (змініть мінімальну ширину для значення, встановленого в інформаційному вікні maxWidth)

Я протестував його, і він працював у кожному браузері, і у мене було понад 400 маркерів ...


Це встановлює фіксовану ширину для InfoWindow (більше не є текучим), що є одним із рішень, але не ідеальним.
Саймон Іст

0

Я знаю, що багато інших людей знайшли рішення, які працювали для їхнього конкретного випадку, але оскільки ніхто з них не працював для мого конкретного випадку, я вважав, що це може бути корисним для когось іншого.

Деякі деталі:

Я використовую API google maps v3 у проекті, де вбудований CSS - це те, чого ми справді хочемо уникати. Мої інформаційні вікна працювали на все, крім IE11, де ширина була розрахована неправильно. Це призвело до переповнення div, що спричинило смуги прокрутки.

Мені довелося зробити три речі:

  1. Видалити всі правила стилю display: inline-block з будь-чого всередині вмісту інформаційного вікна (я замінив на display: block) - у мене виникла ідея спробувати це з нитки (яку я вже не можу знайти), де хтось мав те саме проблема з IE6.

  2. Передайте вміст як вузол DOM, а не як рядок. Я використовую jQuery, тому я міг зробити це, замінивши: infowindow.setContent(infoWindowDiv.html());на infowindow.setContent($(infoWindowDiv.html())[0]); Це виявилося для мене найпростішим, але є безліч інших способів отримати той самий результат.

  3. Використовуйте хак "setMaxWidth" - встановіть параметр MaxWidth у конструкторі - встановлення параметра згодом не працює. Якщо ви насправді не бажаєте максимальної ширини, просто встановіть її на дуже велику кількість.

Я не знаю, чому вони працювали, і я не впевнений, чи буде працювати їх підмножина. Я знаю, що жоден з них не працює для всіх моїх випадків використання окремо, і що 2 + 3 не працює. Я не встиг перевірити 1 + 2 або 1 + 3.


0

Мені було неприйнятно жорстко кодувати ширину та висоту інформаційного вікна, або встановлювати white-space: nowrap, maxWidthрішення мені не допомогло, а все інше або не працювало, або було іншим чином невідповідним для мого випадку використання.

Моїм рішенням було встановити вміст, відкрити вікно, а потім, коли domreadyподія запускається, встановити heightвластивість CSS у вмісті на будь-яку висоту, а потім змусити Google Maps відповідно змінити розмір вікна InfoWindow.

infoWindowє об'єктом InfoWindow, $infoWindowContentsє об'єктом Jquery вмісту, який я хочу туди помістити, mapце мій об'єкт Map. marker- маркер, по якому клацнули.

infoWindow.setContent($infoWindowContents.get(0));

var listener = google.maps.event.addListener(infoWindow, 'domready', function() {
  // Stop listening, otherwise the listeners stack up if the window is opened again
  google.maps.event.removeListener(listener);

  // Set the height on the container to however tall the browser is currently rendering it
  $infoWindowContents.height($infoWindowContents.height());

  // Force Google Maps to recalculate the InfoWindow height
  infoWindow.setContent($infoWindowContents.get(0));
});

infoWindow.open(map, marker);

(Я розмістив те саме рішення над подібним питанням Як отримати розмір вікна Google Maps для зміни розміру відповідно до вмісту, розміщеного всередині нього? )


0

Втративши час і прочитавши деякий час, я просто хотів чогось простого, цей css працював на мої вимоги.

.gm-style-iw > div { overflow: hidden !important; }

Також не є миттєвим рішенням, але зняття / коментування проблеми може змусити їх виправити це, оскільки вони вважають, що це виправлено: http://code.google.com/p/gmaps-api-issues/issues/detail?id= 5713


Це у деяких випадках відсікає вміст. :-( У цій скрипкою на Chrome 38 на Windows На «дддд» відрізаний повністю: jsfiddle.net/simoneast/dckxp62o/4
Саймон Схід

0

Ну це той, хто зробив для мене фокус:

.gm-style-iw>div {
    overflow: visible !important;
}

Тільки установка overflow: visibleна .gm-style-iwнасправді зробив проблему ще гірше! У інспекторі інструментів розробника Chrome я помітив, що всередині .gm-style-iwелемента є два div , які маютьoverflow: auto встановлені за замовчуванням.

Я відображаю досить багато тексту у форматі HTML у моєму InfoWindows, можливо, тому інші рішення взагалі не працювали для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.