我有一个画布元素,在画布上点击按钮时会打开一个
模态框。该模态框上有一些按钮,如果您点击其中一个按钮并且它也在画布上的某个按钮上方,则画布按钮也会被点击。
我想禁用画布,但似乎无法这样做。我尝试对
pointer-events: none
但画布仍然接受点击。有没有办法使画布失效,这样我就可以在不影响画布的情况下点击模态框了?
画布包含一个游戏,并且游戏并不总是相同的,因此我无法访问画布的代码以禁用画布中的按钮。
我想禁用画布,但似乎无法这样做。我尝试对
pointer-events: none
但画布仍然接受点击。有没有办法使画布失效,这样我就可以在不影响画布的情况下点击模态框了?
画布包含一个游戏,并且游戏并不总是相同的,因此我无法访问画布的代码以禁用画布中的按钮。
首先,你要像这样设置:
<div class='your-canvas-wrapper'>
<canvas>
...
</canvas>
</div>
.your-canvas-wrapper {
cursor: not-allowed;
pointer-events: none;
}
$(".your-canvas-wrapper").css("cursor", "not-allowed");
$(".your-canvas-wrapper").css("pointer-events", "none");
您可以创建一个处理程序,例如:
const c = document.querySelector("#myCanvas")
c.addEventListener('click', e => {
if (c.classList.contains('disabled')) {return}
// Do not perform default action, stop bubbling the event
e.preventDefault();e.stopPropagation()
// Mark event as invalid for older browsers
return false
})
.canvas-wrapper {position:relative}
.canvas-wrapper:after {content:'';position:absolute;z-index:999;top:0;left:0;width:100%;height:100%;cursor: not-allowed; pointer-events: none}
<div class='canvas-wrapper'>
<canvas></canvas>
</div>
canvas
元素上创建一个虚假阻止元素,以此方式收集所有点击事件,使它们甚至不能触及canvas
元素(因为该元素位于此元素下方)。stopPropagation
并没有起作用,因为我仍然可以单击模态框按钮,但画布仍然会捕获到它。 - Get Off My Lawn事件传播 - https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopPropagation
在按钮点击的事件处理程序中,停止事件的传播。
stopPropagation
不起作用,因为我仍然可以点击模态框按钮,但画布仍然会捕获它。 - Get Off My Lawne.stopPropagation
。这不是一个简单的画布/ div 的问题。https://jsfiddle.net/7cd14prr/ - Zac
construct 2
构建的,所以我不确定它在后台做了什么。 - Get Off My Lawn