【发布时间】:2021-11-05 02:55:15
【问题描述】:
我想在经过 3D 转换的画布上绘图,但是 Chrome 中的 mouseout 事件出现了一些奇怪的问题。
当我将 JSFiddle 窗口大小设置为 2100 像素时,mouseout 事件会正常工作。
但是,当我将窗口大小设置为 1900px 时,鼠标事件大约在红线处触发。
这真的很奇怪,因为 JSFiddle 窗口大小决定了鼠标移出事件是否被正确触发。
直到这里,鼠标移出事件在 Firefox 和 Edge 中被正确触发,但在 Chrome 中无法正常工作!此外,我们在使用滚动位置(例如,通过添加一些 <br> 并且滚动会影响鼠标移出事件位置)、窗口大小(参见上图)或画布宽度(例如将画布宽度设置为 200 会正确触发鼠标移出事件)。
有没有人可以帮我解决这个错误,以便浏览器正确地触发 mouseout 事件而与窗口大小或滚动位置无关?
代码:JSFiddle
演示:YouTube
小提琴中的代码片段:
$(".dynamic-drawing-canvas").on("mouseout", function(e) {
console.log(e.clientX, e.clientY)
})
#container {
pointer-events: none;
margin-left: 400px;
}
.dynamic-drawing-canvas {
pointer-events: auto;
background-color: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
<canvas class="dynamic-drawing-canvas" width="1200" height="300" style="
transform: matrix3d(1.0303, 0.00317459, 0, 2.13211e-05, -0.68458, -0.165542, 0, -0.00111181, 0, 0, 1, 0, -34.7412, 264.118, 0, 1);
transform-origin: left top;
"></canvas>
</div>
【问题讨论】:
-
我无法在本地或 CodePen 上重现此内容。为确保此问题与 JSFiddle 平台本身无关,您能否发布一个 CodePen 链接来演示相同的问题?
-
当然:codepen.io/wuiuw/pen/QWggvbM 同样的问题:画布有足够的空间(= 画布完全可见 + 左右有一些空间)=> 有效;画布完全可见,但窗口宽度很小 => 事件在错误位置触发
-
这适用于 Firefox,不适用于 chrome/edge。我认为这可能是他们处理转换的方式,但不确定问题出在哪里
-
实际上我被我的金丝雀浏览器误导了(它的窗口大小与我稳定的不同)。这个问题仍然没有解决,并且运行一个平分,我发现它一直存在(至少从 M53 开始)。当然 webkit 也有同样的 bug……
-
是的@wuiwuiwui 你可以做到这一点:) 但不要指望很快就会修复错误
标签: javascript html google-chrome jsfiddle mouseout