如何在HTML5画布背景上允许指针事件,同时允许链接和按钮接收指针事件?

如何在HTML5画布背景上允许指针事件,同时允许链接和按钮接收指针事件?,html,canvas,mouseevent,Html,Canvas,Mouseevent,我将HTML5canvas设置为类似于互连节点()的背景。canvas元素按预期工作,但当我将其设置为页面背景时,我无法单击页面上的链接或按钮 当我通过声明z-index值或编辑HTML使其成为第一个元素,将canvas背景设置到所有元素的后面时,我通常可以单击链接,但每次按钮上的指针事件处于活动状态时(例如悬停)它阻止画布背景获取鼠标指针的位置 我认为这与指针事件有关,但我不能跳过这一步,因为我不确定该怎么办。假设您将文档内容放在div中,在画布上有一个绝对的位置,为了与画布上的粒子进行交互,

我将HTML5
canvas
设置为类似于互连节点()的背景。
canvas
元素按预期工作,但当我将其设置为页面背景时,我无法单击页面上的链接或按钮

当我通过声明
z-index
值或编辑HTML使其成为第一个元素,将
canvas
背景设置到所有元素的后面时,我通常可以单击链接,但每次按钮上的
指针事件
处于活动状态时(例如
悬停
)它阻止
画布
背景获取鼠标指针的位置


我认为这与
指针事件有关,但我不能跳过这一步,因为我不确定该怎么办。

假设您将文档内容放在div
中,在
画布上有一个绝对的位置,为了与画布上的粒子进行交互,您可以在
#wrap
上使用鼠标位置。在您的示例中,我使用的是
wrap.addEventListener('mousemove',mousemoveHandler,false)
而不是canvas.addEventListener('mousemove',mousemoveHandler,false)

(函数(){
变量画布、ctx、circ、节点、鼠标、灵敏度、兄弟姐妹限制、密度、节点数量、锚定长度、鼠标半径;
//下一个节点必须离激活连接有多近(在px中)
//较短的距离==更好的连接(线宽)
灵敏度=100;
//请注意,同级限制不“准确”,因为节点实际可以有比此值更多的连接,这是因为节点接受同级节点而不考虑其当前连接。这是可以接受的,因为潜在的修复不会导致显著的视觉差异
//兄弟节点越多==节点越大
兄弟姐妹_限值=10;
//默认节点边距
密度=50;
//使用的节点总数(创建后增加)
节点数量=0;
//避免节点扩散
锚定长度=20;
//高光半径
鼠标半径=200;
circ=2*Math.PI;
节点=[];
canvas=document.querySelector('canvas');
调整窗口大小();
鼠标={
x:canvas.width/2,
y:canvas.height/2
};
ctx=canvas.getContext('2d');
如果(!ctx){
警报(“oops!您的浏览器不支持画布:”(“”);
}
功能节点(x,y){
这个.anchorX=x;
这个。anchorY=y;
this.x=Math.random()*(x-(x-锚定长度))+(x-锚定长度);
this.y=Math.random()*(y-(y-锚定长度))+(y-锚定长度);
this.vx=Math.random()*2-1;
this.vy=Math.random()*2-1;
this.energy=Math.random()*100;
this.radius=Math.random();
this.sides=[];
这个亮度=0;
}
Node.prototype.drawNode=函数(){
var color=“rgba(255,0,0,“+this.brightness+””);
ctx.beginPath();
ctx.arc(this.x,this.y,2*this.radius+2*this.sibbines.length/sibbines\u LIMIT,0,circ);
ctx.fillStyle=颜色;
ctx.fill();
};
Node.prototype.drawConnections=函数(){
for(var i=0;i锚定长度){
this.vx=Math.random()*-2;
}否则{
this.vx=Math.random()*4-2;
}
if(this.y-this.anchorY<-锚定长度){
this.vy=Math.random()*2;
}else if(this.y-this.anchorY>锚定长度){
this.vy=Math.random()*-2;
}否则{
this.vy=Math.random()*4-2;
}
}
this.x+=this.vx*this.energy/100;
this.y+=this.vy*this.energy/100;
};
函数initNodes(){
clearRect(0,0,canvas.width,canvas.height);
节点=[];
对于(变量i=密度;i最大\u距离){
最大距离=节点兄弟距离;
s=k;
}
}
如果(距离<最大距离){
节点1。兄弟节点。拼接(s,1);
node1.兄弟姐妹.推送(node2);
}
}
}
}
}
}
}
函数redrawsecene(){
调整窗口大小();
clearRect(0,0,canvas.width,canvas.height);
findSiblings();
变量i,节点,距离;
对于(i=0;i<节点数量;i++