HTML:
<ya-template-layout ya-key="customItemContentLayout"> <h2 class=ballon_header>$[properties.balloonContentHeader|raw]</h2> <div class=ballon_body>$[properties.balloonContentBody|raw]</div> <div class=ballon_footer>$[properties.balloonContentFooter|raw]</div> </ya-template-layout> <ya-map ya-zoom="9" ya-center="{{mapCenter}}" ya-controls=""> <ya-cluster ya-options="{clusterDisableClickZoom: true,clusterOpenBalloonOnClick: true,clusterBalloonPanelMaxMapArea: 0,clusterBalloonContentLayoutWidth: 350,clusterBalloonItemContentLayout: 'customItemContentLayout',clusterBalloonLeftColumnWidth: 120}"> <ya-geo-object ng-repeat="o in geoObjects" ya-source="o"></ya-geo-object> </ya-cluster> </ya-map>
CSS
.ballon_header { font-size: 16px; margin-top: 0; margin-bottom: 10px; color: #708090; } .ballon_body { font-size: 14px; text-align: center; } .ballon_footer { font-size: 12px; text-align: right; border-top: 1px solid #7D7D7D; color: #7D7D7D; margin-top: 10px; }
javascript:
var objs=[]; $scope.mapCenter=[37.619044,55.755381]; for(var i= 0;i<100;i++){ objs.push({ geometry:{ type:'Point', coordinates:getRandomCoordinates() }, properties:{ // Устаналиваем данные, которые будут отображаться в балуне. balloonContentHeader: 'Метка №' + (i + 1), balloonContentBody: getContentBody(i), balloonContentFooter: 'Мацуо Басё' } }); } $scope.geoObjects=objs; function getRandomCoordinates () { return [ $scope.mapCenter[0] + (Math.random() * 0.3 - 0.15), $scope.mapCenter[1] + (Math.random() * 0.5 - 0.25) ]; } var placemarkBodies; function getContentBody (num) { if (!placemarkBodies) { placemarkBodies = [ ['Желтый лист в ручье.', 'Просыпайся, цикада,', 'Берег все ближе.'].join('<br/>'), ['Ива на ветру.', 'Соловей в ветвях запел,', 'Как ее душа.'].join('<br/>'), ['Лежу и молчу,', 'Двери запер на замок.', 'Приятный отдых.'].join('<br/>') ]; } return '<strong>Тело метки №' + (num + 1) + '</strong><br/>' + placemarkBodies[num % placemarkBodies.length]; }