【问题标题】:Drawing a circle on the canvas using mouse events使用鼠标事件在画布上绘制一个圆圈
【发布时间】:2011-04-18 09:14:22
【问题描述】:

我正在尝试使用鼠标事件在画布上使用鼠标绘制一个圆圈,但它没有绘制任何东西:

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();
};
};

我做错了什么?

【问题讨论】:

    标签: javascript html canvas geometry


    【解决方案1】:

    好吧,这段代码 sn-p 并没有告诉我们太多信息,但是您的代码中有几个明显的错误。 首先,DOM 事件对象没有 _x 和 _y 属性。而是clientXclientYpageXpageY。 要从当前事件对象获取相对鼠标坐标,您可以执行以下操作:

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

    接下来,canvas 的 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/

    我希望这会有所帮助。 干杯

    【讨论】:

    • 不完全是我想要的,但确实帮助我理解了如何使用鼠标事件来实现我想要做的事情
    • 你能分享一下 jSFiddele 中的鼠标事件列表吗?我们有 onmouseover 事件,我们有其他事件的列表吗?
    • @PKKG 在此处阅读有关 DOM 事件(包括鼠标事件)的更多信息:w3.org/TR/DOM-Level-2-Events/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多