ドラッグする場合は、静的な画像を提供するので、Google Chart APIでは不十分です。代わりに、<canvas>
とglobalCompositeOperation
を組み合わせて、交差するときの処理を設定することができます("lighter"
がhttp://jsfiddle.net/eGjak/226/を追加します)。
このソリューションは便宜上jQueryを使用しています。クリックすると言語が表示されませんが、このコードは実装しようとしているものの開始点になる可能性があります。
var ctx = $('#cv').get(0).getContext('2d');
var pi2 = Math.PI * 2;
ctx.globalCompositeOperation = "lighter";
ctx.fillStyle = "rgba(255, 0, 0, 0.25)"; // semi-transparent color
var Circle = function(x, y, r) {
this.x = x;
this.y = y;
this.r = r;
};
var circles = [
new Circle(100, 100, 50),
new Circle(200, 200, 75),
new Circle(200, 100, 25)
];
function iterate(f) { // convenience function
for(var i = 0; i < circles.length; i++) {
f.call(circles[i], i, circles[i]);
}
}
function draw() {
ctx.clearRect(0, 0, 400, 400);
iterate(function() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, pi2);
ctx.fill();
ctx.stroke();
});
}
var sqrt = Math.sqrt;
var selected;
function coords(e) {
var o = $('#cv').offset(),
x = e.pageX - o.left,
y = e.pageY - o.top;
return {x: x, y: y};
}
var grab; // to save grab offset from middle of selected circle
$("#cv").mousedown(function(e) {
var c = coords(e);
grab = c;
iterate(function() {
var dx = this.x - c.x,
dy = this.y - c.y;
if(sqrt(dx * dx + dy * dy) < this.r) { // mouse within this circle
selected = this;
grab.x -= this.x;
grab.y -= this.y;
}
});
}).mousemove(function(e) {
var c = coords(e);
if(selected) {
selected.x = c.x - grab.x;
selected.y = c.y - grab.y;
draw();
}
}).mouseup(function() {
selected = null;
});
draw();
Aベン図近いと思われる - それらを作成するためのすぐに使用できるソリューションは、GoogleのチャートAPIです:http://code.google.com/apis/chart/image/docs/gallery/venn_charts。 html。 – pimvdb
あなたはvennの図が必要です。 Google Chartingをチェックしてください。このhttp://keith-wood.name/gChart.htmlを使用することもできます。自分自身でそれを行う必要がある場合はhttp://raphaeljs.com/でチェックしてくださいベクトルなので、より簡単になるはずです。 – Matt
有望に見えますが、私は円をドラッグアンドドロップすることができると思いますか? –