javascript - 如何在 Canvas 圆上附加jquery单击事件处理程序以显示弹出框

标签 javascript jquery html canvas

我有一个弹出功能,带有像 facebook 一样的通知图标。但是,当我们单击该通知图标时,应该会显示弹出窗口。对于这些,我需要附加一个事件处理程序。我的部分代码在这里:

$("#comment_save").click(function(){
cmt++;
//drawing circle
context.beginPath();
context.arc(90,60,10,0,2*Math.PI);
context.lineWidth = 2;//for border thikness
context.fillStyle = 'green';
context.fill();
context.strokeStyle = 'gray';
context.stroke();
//drawing text
context.font="15px Georgia";
context.fillStyle = 'yellow';
if(cmt<=9){
cmt="0"+cmt;
}
context.fillText(cmt,80,65);
$(".popup").hide();
});

最佳答案

在 Canvas 中,不操作 DOM 元素,这就是为什么您无法附加到 Canvas 上的任何内容。

对于 Canvas ,我们只有坐标。我们将单击事件附加到 Canvas 元素并读取单击发生的位置的坐标。当我们在 Canvas 上绘制某些内容时,我们只需记住这一点,当单击时,我们会搜索在 Canvas 上绘制的任何内容的坐标是否与单击的坐标相匹配。

查看示例 http://jsfiddle.net/Deele/N2uX5/

var canvas = document.getElementById('myCanvas'),
    context = canvas.getContext('2d'),
    clickableAreas = [];
$(function() {
    $("#comment_save").click(function(){
        //drawing circle
        context.beginPath();
        context.arc(90,60,10,0,2*Math.PI);
        context.lineWidth = 2;//for border thikness
        context.fillStyle = 'green';
        context.fill();
        context.strokeStyle = 'gray';
        context.stroke();
        //drawing text
        context.font="15px Georgia";
        context.fillStyle = 'yellow';
        context.fillText('1',80,65);
        $("#myCanvas").click(function(e){
            var x = e.pageX - this.offsetLeft,
                y = e.pageY - this.offsetTop;
            console.log('Click at ['+x+'|'+y+']');
            if (coordinatesWithin(x, y, 90 - 10, 90 + 10, 60 - 10, 60 + 10)) {
               alert('circle was clicked');
            }
        });
    });
});
function coordinatesWithin(x,y, minX, maxX, minY, maxY) {
    return (x >= minX && x <= maxX && y >= minY && y <= maxY);
}

有一些教程,介绍如何自动化此过程并更好地控制它,例如 http://pterkildsen.com/2013/06/28/create-a-html5-canvas-element-with-clickable-elements/

如果你在 Canvas 上绘制了大量的东西,具有详细的形状(不是正方形),有很多层,并且你希望能够知道单击了哪一个,我会使用坐标数组的方法,其中所有坐标都被存储,并且每个东西在 Canvas 上逐层绘制时,都会获得特定像素的所有权,当所有东西都绘制在 Canvas 上时,您将以带有坐标的数组结束,其中每个坐标都有特定的所有者,由某种 ID 定义,以及带有回调函数的数组,由 ID 标识。单击 Canvas 时,您只需在第一个数组中查找坐标并从第二个数组中触发函数。

关于javascript - 如何在 Canvas 圆上附加jquery单击事件处理程序以显示弹出框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23558244/

相关文章:

html - 3 DIV 并排不会正确对齐

javascript - 尝试让一个对象识别其父对象,而不将父对象传递到子对象的实例中

javascript数组在函数外为空

javascript - 如何在没有提交按钮的情况下提交表单?

jquery Children() 选择器未选择正确的元素

javascript - 请帮我简化以下代码

jquery - 防止 jquery-validate 使用 title 属性作为错误信息?

html - 如何将我的图标放在我的 div 的中间和中心?

javascript - 匿名 qt 脚本函数的上下文?

javascript - 向 for 循环添加回调