如何用JS限制网站的可交互部分?

How to limit interactable section of website with JS?

以一个html canvas为例,它位于页面中间,宽度和高度都小于页面本身,所以有一个矩形canvas中间(由轮廓分隔)。

如何制作页面的这一部分,这个矩形中包含的区域,页面本身的可交互部分?

我有以下代码:

canvas.html

<html>
    <head>
        <meta charset="utf-8">
        <title>Graphs</title>
        <link rel="stylesheet" href="index.css">
        <script type="module" src="application.js"></script>
    </head>

    <body>
        <canvas id="appCanvas" style="border:1px solid #000000;">
        </canvas>
    </body>
</html>

index.css

canvas {
    padding: 0;
    margin: auto;
    display: block;
    width: 60%;
    height: 80%;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
}

application.js

function resize() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
}

window.onresize = resize;
resize();

application.js 还包括对 mouseup 的检查,即在单击鼠标的位置绘制一个圆圈。

使用给定的代码,如前所述,中间有一个框,但是单击此框外仍会创建一个圆圈。圆圈仍然在盒子内部制作,只是投影在盒子内部。所以点击页面的左上角会在框的左上角添加一个圆圈,等等

我怎样才能做到只有在框中单击才会出现圆圈,也就是说,不会发生投影(即单击框的左上角会在框的左上角创建圆圈)?

如果直接在 canvas 上添加 onmouseup 事件处理程序,则只会注册 canvas 内的点击。

The mouseup event is fired at an Element when a button on a pointing device (such as a mouse or trackpad) is released while the pointer is located inside it. Element: mouseup event

否则你可以看看mouseup事件的目标。

document.body.onmouseup = (e) => {
  if(e.target.id === 'appCanvas'){
    console.log("clicked canvas with no projection"); 
  }
}
canvas {
  padding: 0;
  margin: auto;
  display: block;
  width: 60%;
  height: 80%;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}
<html>

<head>
  <meta charset="utf-8">
  <title>Graphs</title>
  <link rel="stylesheet" href="index.css">
  <script type="module" src="application.js"></script>
</head>

<body>
  <canvas id="appCanvas" style="border:1px solid #000000;">
        </canvas>
</body>

</html>