На карте AmChart, как инициировать событие вручную?

В AmMap присутствует событие «homeButtonClicked», которое срабатывает, когда вы нажимаете кнопку «Домой».

Я хочу вызвать это событие вручную. Есть ли способ сделать это?


person Rahul Chaudhari    schedule 18.08.2015    source источник
comment
Вы хотите инициировать событие ИЛИ вызвать его эффект (полное уменьшение)?   -  person martynasma    schedule 18.08.2015
comment
Событие не полностью уменьшено   -  person Rahul Chaudhari    schedule 18.08.2015


Ответы (3)


Чтобы полностью уменьшить масштаб карты, используйте zoomToSelectedObject() ant pass в map.dataProvider в качестве параметра.

I.e.:

map.zoomToSelectedObject(map.dataProvider);

Рабочая демонстрация:

var map = AmCharts.makeChart( "chartdiv", {
  "type": "map",
  "dataProvider": {
    "map": "worldLow",
    "getAreasFromMap": true
  },
  "areasSettings": {
    "autoZoom": true
  }
} );

function zoomOut() {
  map.zoomToSelectedObject(map.dataProvider);
}
#chartdiv {
  width: 100%;
  height: 250px;
}
<script src="http://www.amcharts.com/lib/3/ammap.js"></script>
<script src="http://www.amcharts.com/lib/3/maps/js/worldLow.js"></script>
<input type="button" value="Zoom Out" onclick="zoomOut();" />
<div id="chartdiv"></div>


Чтобы инициировать событие на карте или любом объекте amCharts, вы можете использовать метод fire(). То есть:

map.fire("homeButtonClicked", {
  type: "homeButtonClicked",
  chart: map
});

Вот рабочий пример:

var map = AmCharts.makeChart( "chartdiv", {
  "type": "map",
  "dataProvider": {
    "map": "worldLow",
    "getAreasFromMap": true
  },
  "areasSettings": {
    "autoZoom": true
  }
} );

map.addListener("homeButtonClicked", function(event) {
  alert('homeButtonClicked');
});

function testEvent() {
  map.fire("homeButtonClicked", {
    type: "homeButtonClicked",
    chart: map
  });
}
#chartdiv {
  width: 100%;
  height: 280px;
}
<script src="http://www.amcharts.com/lib/3/ammap.js"></script>
<script src="http://www.amcharts.com/lib/3/maps/js/worldLow.js"></script>
<input type="button" value="trigger event" onclick="testEvent();" />
<div id="chartdiv"></div>

person martynasma    schedule 18.08.2015
comment
Пробовал, но не удалось с этим исключением - Uncaught TypeError: невозможно прочитать свойство «длина» неопределенного в a.inherits.b.fire - person Rahul Chaudhari; 18.08.2015
comment
Извините, забыл один параметр для fire(). Обновил ответ. - person martynasma; 18.08.2015
comment
Извините, но я хочу инициировать событие homeButtonClicked из-за пределов карты, которое вернет карту в исходное положение. - person Rahul Chaudhari; 19.08.2015
comment
Хорошо, так почему я сказал прямо противоположное моему вопросу в комментарии? :) Я собираюсь обновить ответ. - person martynasma; 19.08.2015
comment
Ни один из примеров не работает сейчас при нажатии на страны. - person Eddie; 27.03.2018

Кажется, код изменился с момента последнего ответа на этот вопрос. Для меня это то, что работает.

map.clickMapObject(map.dataProvider)
person Eddie    schedule 27.03.2018

(Для martynasma) У вас все еще есть ошибка в методе триггерного события (testEvent). Правильно:

map.fire({
    type: "homeButtonClicked",
    chart: map
  });
person Bogdan    schedule 16.07.2017