更高z-index覆盖的元素上的悬停事件?

Posted

技术标签:

【中文标题】更高z-index覆盖的元素上的悬停事件?【英文标题】:Hover events on element covered by higher z-index? 【发布时间】:2014-04-24 17:08:07 【问题描述】:

我有一个横跨整个屏幕的画布元素 (canvas-mouse) - 它的目的是在一定大小的鼠标周围绘制一个 50% 不透明度的圆圈 (grabsize)。页面上还有一些 div 中的图像。我希望这些图像可以点击/悬停,但我也希望canvas-mouse 中的 50% 不透明度圆圈出现在它们的顶部。

有没有办法做到这一点?

html

<canvas id="canvas-mouse" class="fullscreen"></canvas>
<div class="object die"><img src="images/Die_d6.svg"></div>

CSS:

html, body 
    width:  100%;
    height: 100%;
    margin: 2px;
    overflow: hidden;
    color: #FFFFFF;
    background-color: #2C744C;


canvas.fullscreen 
    position: absolute;
    left: 0px;
    top: 0px;
    z-index: -1;


.object 
    position: absolute;


#canvas-mouse 
    z-index: 10;

javascript

CanvasRenderingContext2D.prototype.drawCircle = function(xpos, ypos, radius, linewidth, linecolor, fill) 
    if(typeof(linewidth)==="undefined") 
        linewidth = 1;
    
    if(typeof(linecolor)==="undefined") 
        linecolor = "#000000";
    

    this.beginPath();
    this.arc(xpos, ypos, radius, 0, 2*Math.PI, false);
    this.lineWidth = linewidth;
    if(typeof(fill)!=="undefined") 
        this.fillStyle = fill
        this.fill();
    
    this.strokeStyle = linecolor;
    this.stroke();

CanvasRenderingContext2D.prototype.maximize = function() 
    this.canvas.width = window.innerWidth;
    this.canvas.height = window.innerHeight;

mousectx = $("#canvas-mouse")[0].getContext("2d");
mousectx.maximize();

//Dice handlers
$(".object.die").hover(function() 
    //Hover event goes here
)
$(".object.die").mousedown(function() 
    //Click event goes here
)

//Mouse movement handler
$(document).mousemove(function(e)
    //Get the mouse positions and put them in mouse
    mouse.x = e.pageX;z
    mouse.y = e.pageY;

    //Redraw the grab circle
    mousectx.clearCanvas();
    mousectx.drawCircle(mouse.x,mouse.y,grabsize,1,"#000000","rgba(0,0,255,0.5)");
);

提前致谢。

【问题讨论】:

这个***.com/questions/3680429/… 可能会解决问题.. 画布鼠标不应该有一个相对位置来让 z-index 起作用吗? 【参考方案1】:

尝试使用pointer-events: none。该规则告诉浏览器忽略一个元素。它不会接收鼠标事件,但会'通过'

#canvas-mouse 
    z-index: 10;
    pointer-events: none;

【讨论】:

以上是关于更高z-index覆盖的元素上的悬停事件?的主要内容,如果未能解决你的问题,请参考以下文章

如果被另一个元素覆盖,则响应 CSS 悬停选择器

z-index详解

z-index详解

如何让带有 z-index 的 div 在悬停时覆盖另一个 div

当光标隐藏在其他 HTML 元素后面时如何触发 mouseenter 事件?

悬停效果不适用于 z-index 较低的元素