ラファエルの拡張機能Mapaelを使用して、インタラクティブマップを提供しています。これまでに複数の領域を選択し、クリックすると、今度は一度に1つの領域だけを選択するようにユーザーを制限できます。ここjQueryを使用してSVGマップ上の1つの領域のみを選択します。
http://plnkr.co/edit/2UAl4Yax99dJAPIDWuTy?p=preview
クリック機能をカバーしてコードの一部です。
eventHandlers: {
click: function(e, id, mapElem) {
var newData = {
'areas': {}
};
if (mapElem.originalAttrs.fill == "#f4f4e8" && "id[^='department']") {
newData.areas[id] = {
attrs: {
fill: "#0088db"
}
};
$('#' + id).css("visibility", "visible")
}
else if (mapElem.originalAttrs.fill == "#0088db" && "id[^='department']") {
newData.areas[id] = {
attrs: {
fill: "#f4f4e8"
}
};
$("#" + id).css("visibility", "hidden")
}
$(".mapcontainer").trigger('update', [newData]);
}
},
ここでも示されているマップは、複数の領域をクリックすることができますが、一度に1つの領域を選択できるようにしたいと思います。
私はかなり自分自身で解決策を考えてきましたが、私はコーダーが少しブロックされていると思っていましたし、ちょっとした助言をして正しい方向に向けることができました。私は.bind、.target、そしてmapleのafterUpdate機能を使って実験してきました。
私が最初にどの要素がクリックされていないことを確認するためにクリックしたときにソリューションがSVGパスをループするようなものができれば/青の塗りつぶしを持っており、そこから行くの?わからないvar options = {
mapOptions: {}, // was updatedOptions
replaceOptions: false // replace opt.resetPlots/resetAreas: whether mapsOptions should entirely replace current map options, or just extend it,
newPlots: {}, // was newPlots
newLinks: {}, // was opt.newLinks
deletePlotKeys: [], // was deletedPlots
deleteLinkKeys: [], // was opt.deletedLinks
setLegendElemsState: true, // is new
animDuration: 0, // was opt.animDuration
afterUpdate: function(){} // was opt.afterUpdate
};
$(".container").trigger('update', [options]);
これは私にとっては少し複雑すぎるように思えますが、実際にどのように実装されるかはわかりません。
最後にクリックし、次のクリックでその色をリセットされたものを覚えておいてください。 –
else if文の中でこれをやっていますか? – alexc