キャンバスを定義し、それにいくつかの図形を描画する場合、各図形のイベントやその他のプロパティを宣言するために、各図形または画像を特定するにはどうすればよいでしょうか。長方形と三角形があるとします。そのため、それらを特定のエンティティとして定義し、それらを個別に処理するためのメカニズムを用意できますか。KineticJS については知っていますが、この機能を自分で実装したいと思います (学習目的で)。誰でもその方法を特定できますか。それともアルゴリズム的なアプローチでしょうか??
2302 次
2 に答える
7
マウスイベントを使ったピンポイントについて説明したい
まず、マウスの位置を取得するメソッドを実装する必要があります
function getMousePos(canvas, evt){
// get canvas position
var obj = canvas;
wrapper = document.getElementById('wrapper');
var top = 0;
var left = 0;
while (obj && obj.tagName != 'BODY') {
top += obj.offsetTop;
left += obj.offsetLeft;
obj = obj.offsetParent;
}
// return relative mouse position
var mouseX = evt.clientX - left + window.pageXOffset+wrapper.scrollLeft;
var mouseY = evt.clientY - top + window.pageYOffset+wrapper.scrollTop;
return {
x: mouseX,
y: mouseY
};
}
- 矩形
たとえば、次の値 x1、y1、w、h を持つ長方形があるとします。
$(canvas).mousemove(function(e){
//Now call the method getMousePos
var mouseX, mouseY;
var mousePos = getMousePos(canvas, e);
mouseX=mousePos.x;
mouseY=mousePos.y;
// check if move on the rect
if(mouseX>x1 && mouseX<x1+w && mouseY>y1 && mouseY<y1+h)
{
alert('mouse on rect')
}
});
- サークル
次の値 x、y、r を持つ円があるとします。
$(canvas).mousemove(function(e){
//Now call the method getMousePos
var mouseX, mouseY;
var mousePos = getMousePos(canvas, e);
mouseX=mousePos.x;
mouseY=mousePos.y;
// check if move on the rect
if(Math.pow(mouseX-x,2)+Math.pow(mouseY-y,2)<Math.pow(r,2))
{
alert('mouse on circle')
}
});
このようにして、キャンバスのオブジェクトを特定できます
于 2012-03-22T13:17:27.780 に答える
1
そのために、DOM の既存の機能を使用することはできません。だから、自分で書く必要があります。次のようなオブジェクト モデルを作成することから始めることができます。
function Shape(x, y) {
var obj = {};
obj.x = x;
obj.y = y;
obj.paint = function(canvasTarget) {
}
return obj;
}
function Rectangle(x, y, width, height) {
var obj = Shape(x, y);
obj.width = width;
obj.height = height;
obj.paint = function(canvasTarget) {
//paint rectangle on the canvas
}
return obj;
}
function Canvas(target) {
var obj = {};
obj.target = target
obj.shapes = [];
obj.paint = function() {
//loop through shapes and call paint
}
obj.addShape(shape) {
this.shapes.push(shape);
}
}
オブジェクト モデルを作成したら、それを使用して次のような形状を描画できます。
var cnv = new Canvas();
cnv.addShape(new Rectangle(10,10,100,100));
cnv.paint();
次に、キャンバスで onclick イベントを処理し、クリックされた図形を判別できます。
于 2012-03-22T13:04:29.940 に答える