Клуб API Карт

Пользовательская кнопка закрытия балуна

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

У балуна есть стандартная кнопка закрытия.

Но при просмотре яндекс карты через смартфон, эта кнопка очень мелкая, попасть сложно.

Можно ли увеличить ее раза в два или создать свою кнопку?

Спасибо.

8 комментариев

это можно легко сделать с помощью макетов,

примерно так:

var myBalloonCloseButtonLayout = ymaps.templateLayoutFactory.createClass(

'×' +

''

);

    var placemark = new ymaps.Placemark([55.650625, 37.62708], {

            name: 'у меня своя кнопка закрытия'

        }, {

            balloonCloseButtonLayout: myBalloonCloseButtonLayout

        });


    map.geoObjects.add(placemark);

small_butterfly_long_long_as_long_as_i_can_do_it_here
28 января 2016, 02:47

замечательный способ, но кнопка не будет закрывать балун. Как переопределить html кнопки, унаследовав при этом логику?

После исследования механизма создания стандарной кнопки появилось такое решение:

 

var myCloseButton = ymaps.templateLayoutFactory.createClass("×",
    ymaps.layout.storage.get('twirl#balloonCloseButton').prototype
)

Не очень здорово, но работает

Вообще не здорово.

Чтобы она работала, конечно нужно слушать клик по ней.

см. этот пример

small_butterfly_long_long_as_long_as_i_can_do_it_here
28 января 2016, 02:47

Тоже хороший вариант.

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

И подложить такой костыль проще, чем делать полное переопределение балуна и описывать логику заново своим велосипедом.

Лучше всего было бы в фабрику шаблонов добавить возможность создавать шаблоны на основе уже существующих, тем более что и сейчас там происходит расширение базовых методов, а не определение новых

так и есть

макеты расширяют базовые макеты

 

small_butterfly_long_long_as_long_as_i_can_do_it_here
28 января 2016, 02:47

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

посмотрите документацию по templateLayoutFactory

small_butterfly_long_long_as_long_as_i_can_do_it_here
28 января 2016, 02:47

у фабрики есть только один метод - createClass, и она всегда   расширяет layout.templateBased.Base и не показано, как расширять другие классы.

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