Я новичок в jvectormap, но нашел, что это потрясающе.Изменение цвета области в JVectorMap с кнопкой
Я создал карту со следующими характеристиками. Когда карта загружается, около 30 стран имеют цвета, красные, желтые или зеленые, на основе некоторого балла, связанного с этой страной (например, процент населения, который является поклонниками Duran Duran). Остальные страны просто серые. (Существует некоторая интерактивность на цветных регионах, как всплывающие подсказки и щелчками.) Когда карта сначала создается, есть строка в конце:
map.series.regions[0].setValues(getColors(currentColor);
и currentColor ранее были определены:
var currentColor = "[ALL]";
, так что все цвета (красный, желтый и зеленый) отображаются на карте, и это работает.
Под картой Я хочу предоставить кнопки, чтобы показывать только страны данного цвета, например, только красные. Когда нажимается красная кнопка, только красные страны будут показаны красным цветом, а остальные - серым. Каждый цвет будет иметь свою собственную кнопку.
Кажется, что это будет легко сделать. Я видел технику, используемую здесь: http://jvectormap.com/examples/random-colors/, где вы можете щелкнуть, чтобы случайно изменить цвета, и все остальное о карте (панорамирование, масштабирование и т. Д.) Остается неповрежденным. Ключевая часть:
map.series.regions[0].setValues(generateColors());
, когда у вас есть карта конструктор как:
map = new jvm.Map({
(Если ваша карта конструктор выглядит так:
$('#map').vectorMap({
, то вам нужно будет сделать что-то например:
var mapObject = $('#map').vectorMap('get', 'mapObject');
mapObject.series.regions[0].setValues(generateColors());
)
Я пытался сделать именно это, но с моим собственным getColors (цвет) Метод:
map.series.regions[0].setValues(getColors(currentColor));
где я регенерировать массив цвета карты, который передается setValues (), но есть никаких изменений на карте. Я знаю, что массив цветов карты верен, потому что при нажатии кнопки было сделано следующее:
(1) изменить текущую переменную цвета (2) удалить контейнер div div: $ («#map»). empty() (3) перерисовать карту с нуля с помощью конструктора и вызова map.series.regions [0] .setValues (getColors (currentColor));
Недостатком этого подхода является то, что любое панорамирование или масштабирование теряется, когда карта перерисовывается с нуля. Есть ли какой-то шаг, который мне не хватает, чтобы обновить карту, когда я звоню: map.series.regions [0] .setValues ()
Вот пример jsfiddle, показывающий, как он не работает, если вы не перерисовываете карту из scratch: http://jsfiddle.net/msalamon/euqyfs7v/10/
В jsfiddle, если вы называете «High Redraw», он отображает только красные страны, но только путем перерисовки.
Существует другой подход. См .: http://jsfiddle.net/msalamon/euqyfs7v/12/. Вместо изменения выше, сначала вызовите map.series.regions [0] .clear(); а затем получите цветной массив с цветами только для интересующих вас регионов. Все остальные регионы получат цвет по умолчанию. –