2015-10-09 2 views
1

Я внедрил infographic/map с использованием crossfilter и d3.js.geoChoroplethChart карта с различной непрозрачностью заполнения для выбранного элемента

Что я хотел бы, чтобы добавить функциональность ...

Когда пользователь щелкает определенный объект, в моем случае страну-члена Европейского союза, Непрозрачность заливки выбранного состояния отличает себя от остальное, т.е. становится темнее.

Я нашел хороший пример here, но код там точно не определяет, где находится эта часть, касающаяся выбора состояния.

Как вы можете видеть на my map, ничто не отличает выбранное состояние на карте, я чувствую, что это очень смущает пользователей.

Весь мой код можно найти here.

Это часть наиболее тесно связан с самой картой:

 //This is the data for the Map 
    d3.json("data/europe.json", function (error, eu) { 

     console.log('map', eu) 
     usChart 
     .width(590) 
     .height(500) 
     .projection(projection 
        .scale((1200 + 1)/2) 
        .translate([660/4, 3360/4]) 
        .precision(.1) 
        ) 
       .dimension(countries) 
       .group(countriesJobsdSum) 

        .filterHandler(function(dimension, filter){  
    dimension.filter(function(d) {return usChart.filter() != null ? d.indexOf 
    (usChart.filter()) >= 0 : true;}); // perform filtering 
    return filter; // return the actual filter value 
}) 

       .colors(d3.scale.quantize().range(
        ["#8c857d", "#d982ab", "#d9525e", "#a63f52", "#8c6976", "#55b1b1", "#637e9e"]) 
       ) 
       .colorDomain([0, 200]) 
       .colorCalculator(function (d) { return d ? usChart.colors()(d) : '#ccc'; }) 
       .overlayGeoJson(eu.features, "countries", function (d) { 
        return d.properties.name; 
        //return d.properties.Country; 
       }) 
       .transitionDuration(0) 
       .title(function (d) { 
        return "Country: " + d.key + "\nNumber of Jobs: " + numberFormat(d.value ? d.value : 0) ; 
       }); 

ответ

2

Хорошая новость заключается в том, что dc.js уже добавляет классы целевых выбранные и невыбранные элементы. Вам просто нужно добавить CSS, чтобы стилизовать эти элементы, но вы хотите их.

Вы могли бы сделать что-то вроде

g.deselected path { 
    fill: gray; 
} 

удалить цвет из регионов выбор которых отменен.

Или вы могли бы

g.selected path { 
    stroke: yellow; 
    stroke-width: 2px; 
} 

, чтобы выделить область (ы), которые выбираются /.

+0

Могу ли я делать другие вещи, ссылаясь на этот выбранный элемент, например, я хочу сосредоточить свою карту вокруг выбранного элемента, возможно ли это? –

+0

Вы можете получить выбранные элементы с помощью селектора либо с помощью jquery, либо с d3. Вам нужно будет сделать некоторые расчеты, как только вы их получите ... это не встроенный или что-то еще. Я буду следить за последующим вопросом. Можно выбрать более одного элемента, и это немного усложнит ситуацию - не забудьте ввести код для этого сценария. –

+0

Итак, может быть, я должен прочитать следующее: 'http: // bost.ocks.org/mike/selection /'? –