Клуб API Карт

Проблема с окном кластера

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

Каким образом правильно выставить ширину окна кластера? Именно кластера, а не его частей (списка и информации об объекте).

Пример http://dril.eu/#item1670

22 комментария
Георгий Бондаренко
28 января 2016, 03:11

с просмотра этих опций все и начиналось

внутри окна поправить не проблема

проблема выставить внешние габариты общего окна

кажется balloonWidth это и должен делать, нет?

Георгий Бондаренко
28 января 2016, 03:11

в том то и дело, что нет

Георгий Бондаренко
28 января 2016, 03:11

он как раз выставляет ширину внутри окна, как бы ширину балуна определенной метки, а не общего окна кластера

Есть опции

clusterBalloonSidebarWidth и balloonWidth. С помощью них можно менять пропорции балуна кластера. Если у вас эти опции работают некорректно, не могли бы вы дать ссылку на пример?

Георгий Бондаренко
28 января 2016, 03:11

Это кусок кода, функция которая генерирует собственно кластер

    function generateGeoObject(coords, pointValues) {
        generateTableRow(pointValues);
        return new ymaps.GeoObject({
            geometry: {type: "Point", coordinates: coords},
            properties: {
                clusterCaption: 'Объект №' + pointValues.id,
                iconContent: pointValues.id,
                balloonContentBody: getBalloonContent(pointValues)
            }
        }, {
                preset: 'twirl#darkgreenStretchyIcon',
                balloonMinWidth: 680,
                geoObjMapId: pointValues.id,
                geoObjCoords: coords
            }
        );
    };

 

Добавляю options

 

    function generateGeoObject(coords, pointValues) {
        generateTableRow(pointValues);
        return new ymaps.GeoObject({
            geometry: {type: "Point", coordinates: coords},
            properties: {
                clusterCaption: 'Объект №' + pointValues.id,
                iconContent: pointValues.id,
                balloonContentBody: getBalloonContent(pointValues)
            },
            options: {balloonSidebarWidth: 300}
        }, {
                preset: 'twirl#darkgreenStretchyIcon',
                balloonMinWidth: 680,
                geoObjMapId: pointValues.id,
                geoObjCoords: coords
            }
        );
    };

 

Только это никак не отражается на ширине сайдбара в кластере

1. options не поле объекта,

оptions - параметр конструктора

2. опции кластера, если задавать их не кластеру напрямую, а через геообъект, надо префиксировать:

balloonSidebarWidth -> clusterBalloonSidebarWidth

Георгий Бондаренко
28 января 2016, 03:11

вроде все логично и понятно, пока читаю

как только пытаюсь поправить код - ничего не получается

ниже все куски кода, напрямую или косвенно связаные с кластерами на этой странице

 

    function generateGeoObject(coords, pointValues) {
        generateTableRow(pointValues);
        return new ymaps.GeoObject({
            geometry: {type: "Point", coordinates: coords},
            properties: {
                clusterCaption: 'Объект №' + pointValues.id,
                iconContent: pointValues.id,
                balloonContentBody: getBalloonContent(pointValues)
            }
        }, {
                preset: 'twirl#darkgreenStretchyIcon',
                balloonMinWidth: 680,
                geoObjMapId: pointValues.id,
                geoObjCoords: coords
            }
        );
    };

 

.......

 

    clusterer = new ymaps.Clusterer({clusterDisableClickZoom: true});
    clusterer.add(myGeoObjects);
    myMap.geoObjects.add(clusterer);

 

.......

 

    clusterer.events.add('objectsaddtomap', function () {
        if (bShowBalloon) {
            var geoObjectState = clusterer.getObjectState(curGeoObj);
            if (geoObjectState.isShown) {
                if (geoObjectState.isClustered) {
                     geoObjectState.cluster.state.set('activeObject', curGeoObj);
                     geoObjectState.cluster.balloon.open();
                } else {
                    curGeoObj.balloon.open();
                }
            }
        }
        bShowBalloon = !1;
    });

 

пожалуйста, допишите нужное непосредственно в код, может быть тогда для меня станет более понятным,о чем Вы говорите

Да вроде всё просто описал 

2. опции кластера, если задавать их не кластеру напрямую, а через геообъект, надо префиксировать:

balloonSidebarWidth -> clusterBalloonSidebarWidth

 

 

Опции в ваши передаются тут

 

{
                preset: 'twirl#darkgreenStretchyIcon',
                balloonMinWidth: 680,
                geoObjMapId: pointValues.id,
                geoObjCoords: coords
            }

Дописываете в них ширину сайдбара балуна кластера с префиксом

 

{
                preset: 'twirl#darkgreenStretchyIcon',
                balloonMinWidth: 680,
                clusterBalloonSidebarWidth: 300,
                geoObjMapId: pointValues.id,
                geoObjCoords: coords
            }

и кажется что этих двух полей в опциях быть не должно:

                geoObjMapId: pointValues.id,
                geoObjCoords: coords

их наверное надо перенести в хэш properties

итого:

 

function generateGeoObject(coords, pointValues) {
        generateTableRow(pointValues);
        return new ymaps.GeoObject({
            geometry: {type: "Point", coordinates: coords},
            properties: {
                clusterCaption: 'Объект №' + pointValues.id,
                iconContent: pointValues.id,
                geoObjMapId: pointValues.id,
                geoObjCoords: coords,
                balloonContentBody: getBalloonContent(pointValues)
            }
        }, {
                preset: 'twirl#darkgreenStretchyIcon',
                balloonMinWidth: 680,
                clusterBalloonSidebarWidth: 300
            }
        );
    };

как то так

Георгий Бондаренко
28 января 2016, 03:11

вставил этот вариант кода

все равно нет изменений, открыл в консоли - ширина 125px, это ширина сайдбара по умолчанию

<td class="ymaps-b-clusters-content__sidebar" style="width: 125px;">

вам нужно опции задавать не в геообъекты, а в кластеризатор

clusterer.options.set({

    clusterBalloonSidebarWidth: 100,

    clusterBalloonWidth: 300

});

Георгий Бондаренко
28 января 2016, 03:11

спасибо, ваш вариант позволил решить половину проблемы

то есть, с его помощью можно легко растянуть сайдбар слева и поле под вывод информации справа

было http://yadi.sk/d/FI-JDnF61IgwS

стало http://yadi.sk/d/k9dvX9zf1Igyk

 

но, как все же изменить ширину самого внешнего окна ?

http://yadi.sk/d/eqaNZd8u1Ih2U

примерно так, как на этом скрине - изменил в консоли браузера

А если задать побольше значение опции clusterBalloonWidth (например 700)? не помогает?

Георгий Бондаренко
28 января 2016, 03:11

тогда расширяется правое поле внутри внешнего окна, которое остается прежней ширины

попробуйте задать еще опцию balloonMaxWidth: 700

так, смотрю у себя на стенде - не помогает эта опция. Сейчас подумаю еще

а нет, ок, просто опечаталась. Такой набор опций срабатывает как надо

clusterBalloonWidth: 710,

clusterBalloonMaxWidth: 800,

clusterBalloonSidebarWidth: 200,

Георгий Бондаренко
28 января 2016, 03:11

спасибо!!!

это то, что нужно http://dril.eu/#item1670

остальное дело техники - поправить стили чтобы не было накладок

 

высоту окон этих окон по аналогии прописать?

 

Георгий Бондаренко
28 января 2016, 03:11

еще раз благодарю, Вы мне очень помогли!

всегда пожалуйста)