2010-09-28 40 views
6

我想提请使用鼠标使用鼠标事件画布上的圆圈在画布上转了一圈,但它不画任何东西:绘图使用鼠标事件

tools.circle = function() { 
var tool = this; 
this.started = false; 
this.mousedown = function (ev) { 
tool.started = true; 
tool.x0 = ev._x; 
tool.y0 = ev._y; 
ctx.moveTo(tool.x0,tool.y0); 
}; 

this.mousemove = function (ev) { 
var centerX = Math.max(tool.x0,ev._x) - Math.abs(tool.x0 - ev._x)/2; 
var centerY = Math.max(tool.y0,ev._y) - Math.abs(tool.y0 - ev._y)/2; 
var distance = Math.sqrt(Math.pow(tool.x0 - ev._x,2) + Math.pow(tool.y0 - ev._y)); 
context.circle(tool.x0, tool.y0, distance/2,0,Math.PI*2 ,true); 
context.stroke(); 
}; 
}; 

我在做什么错?

回答

6

嗯,这段代码并没有告诉我们很多,但是在你的代码中有几个明显的错误。 首先,DOM事件对象不具有_ x和_ y属性。而是clientXclientYpageXpageY。 要获得相对鼠标从目前的事件对象的坐标,你会做这样的事情:

element.onclick = function(e) { 
    var x = e.pageX - this.offsetLeft; 
    var y = e.pageY - this.offsetTop; 
} 

接下来,帆布2D背景的,没有一个方法叫做circle,但你可以写你自己的,可能像:

var ctx = canvas.context; 
ctx.fillCircle = function(x, y, radius, fillColor) { 
    this.fillStyle = fillColor; 
    this.beginPath(); 
    this.moveTo(x, y); 
    this.arc(x, y, radius, 0, Math.PI*2, false); 
    this.fill(); 
} 

总之,这是一个测试的HTML页面来测试这一点:http://jsfiddle.net/ArtBIT/kneDX/

我希望这有助于。 干杯

+0

不正是我想要的,但也帮助我了解如何实现正是我想要使用圆 – Nitesh 2010-10-05 19:49:26

+0

鼠标事件,你可以分享的鼠标事件的列表就像jSFiddele做,我们有onmouseover事件,难道我们有记录的其他事件列表? – 2013-11-12 23:55:14

+0

@PKKG阅读更多关于DOM事件(包括鼠标事件)的信息:http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents – ArtBIT 2013-11-13 11:28:12