如果我定义一个画布并在其上绘制几个形状,那么我如何精确定位每个形状或图像以便在每个形状上声明事件和其他属性。考虑我有一个矩形和一个三角形。所以我可以有一些机制来把它们定义为特定的实体,我可以单独处理它们。我知道KineticJS,但我想自己实现这个功能(用于学习目的)。任何人都可以指出做到这一点的方式。或者可能是一种算法方法?如何识别画布中的形状?
回答
您不能使用DOM中的任何现有功能。所以你必须自己写。
var cnv = new Canvas();
cnv.addShape(new Rectangle(10,10,100,100));
cnv.paint();
然后你就可以处理的onclick事件:
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);
}
}
让你可以用它来绘制形状像这样的对象模型后:你可以通过做一个对象模型,这样启动画布并确定单击哪个形状。
绘画方法是否意味着它重新绘制画布上的每个细节,而不是操纵最后的图像或形状? – 2012-03-22 13:24:12
绘制方法负责绘制形状。您可以通过更改x,y,宽度或高度来操纵形状。 – 2012-03-22 13:50:58
但是画布中现有的形状呢?如果我有一个现有的矩形我是否需要通过调用一个方法将其删除? – 2012-03-22 14:07:06
我想使用鼠标事件
首先,你必须实现一个方法来获得鼠标的位置
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')
}
});
通过这种方式,我们可以找出画布的对象
- 1. 几何/形状识别(奇数形状)
- 2. 在画布上定位和识别形状
- 3. 帆布形状识别功能
- 4. 识别矩形形状
- 5. 如何识别点击上绘制的矩形在画布上
- 6. 图像识别(形状识别)
- 7. 简单的形状识别
- 8. 如何识别在画布上
- 9. 如何选择HTML5画布形状?
- 10. openCV形状缺陷识别
- 11. 重叠形状识别(OpenCV)
- 12. 复杂形状识别
- 13. 识别形状用Matlab
- 14. 形状识别框架?
- 15. 识别手写体形状
- 16. 图像中的形状识别
- 17. 图像中的PHP形状识别
- 18. 画布儿童识别
- 19. 画成画布形状的图像
- 20. html5画布形状填充
- 21. HTML5 - 画布形状描边
- 22. 帆布形状动画
- 23. WPF画布中的形状不出现
- 24. 画布中的自定义形状?
- 25. 清除画布中的形状
- 26. 几何形状识别使用c + +
- 27. 如何识别在C#中的Visio形状的邻居?
- 28. 画布 - 从剪裁的画布中抽象形状
- 29. 如何用画布创建动画形状的不断循环?
- 30. 如何使用opencv/javacv识别图像中的U形状?
请注明任何以上为跟随算法。就像JS Programming一样。 – 2012-03-22 12:57:54