教程
从 G2 2.2.0 版本开始,我们为各个几何标记 geom 增加了选中交互支持,选中的模式包含如下三种:
- 不可选中;
- 单选;
- 多选。
选中模式的设置方式如下(在 geom 对象上添加了 selected()
方法):
// 开启选中模式并设置模式以及选中样式,其中 true 可省略
chart.polygon().position('x*y').selected(true, {
selectedMode: 'multiple' || 'single' || false,
style: {
// 设置选中图形的样式,如不设置则使用默认的样式
}
});
// 关闭选中模式
chart.polygon().position('x*y').selected(false); // 关闭方式 1
chart.polygon().position('x*y').selected({
selectedMode: false
}); // 关闭方式 2
默认情况下,G2 中只有饼图支持选中交互,其他 geom 的选中模式默认情况下都是关闭的。
下面通过两个实例来演示选中 selected(enable, cfg)
方法的使用。
地图省市下钻
本例中的地图 GeoJSON 数据请访问该地址获取:
<script src="https://a.alipayobjects.com/g/datavis/china-geojson/1.0.0/index.js"></script>
或者 github。
function processData(mapData) {
var result = [];
var features = mapData.features;
for (var i = 0; i < features.length; i++) {
var name = features[i].properties.name;
result.push({
"name": name,
"value": Math.round(Math.random() * 1000)
});
}
return result;
}
function renderProvinceChart(provinceChart, name) {
var provinceData = ChinaGeoJSON[name];
provinceChart.clear();
if (!provinceData) {
return false;
}
provinceChart.source(processData(provinceData));
provinceChart.polygon().position(Stat.map.region('name', provinceData))
.label('name', {
label: {
fill: '#333'
}
})
.style({
stroke: '#fff',
lineWidth: 1
})
.color('value', '#e5f5e0-#31a354');
provinceChart.render();
}
var Stat = G2.Stat;
var mapData = ChinaGeoJSON['China'];
var chart = new G2.Chart({
id: 'china',
width: 250,
height: 180,
plotCfg: {
margin: [0, 10]
}
});
chart.source(processData(mapData));
chart.tooltip({
title: null
});
chart.polygon().position(Stat.map.region('name', mapData)).tooltip('name')
.style({
stroke: '#999',
lineWidth: 1,
fill: '#ccc',
globalAlpha: 0.9,
cursor: 'pointer' // 设置鼠标手势
}).selected({ // 设置是否允许选中以及选中样式
selectedMode: 'single', // 多选还是单选
style: {
fill: '#fe9929' // 选中的样式
}
});
chart.render();
var provinceChart = new G2.Chart({
id: 'province',
width: 700,
height: 500,
plotCfg: {
margin: [20, 80, 40, 40]
}
});
var shapeData = chart.getAllGeoms()[0].getData();
for (var i = 0, len = shapeData.length; i < len; i++) {
var item = shapeData[i];
var origin = item['_origin'];
var name = origin.name;
if (name === '浙江') {
renderProvinceChart(provinceChart, name);
chart.getAllGeoms()[0].setSelected(item);
}
}
chart.on('plotclick', function(ev) {
var shape = ev.shape;
if (!shape) {
return false;
}
if (shape && shape.get('selected')) {
var item = shape.get('origin');
var data = item['_origin'];
var name = data.name;
renderProvinceChart(provinceChart, name);
} else {
provinceChart.clear();
}
});