如何修复HTML5全屏模式下画布上鼠标指针的偏移问题
How to fix offset issue for mouse pointer on canvas on HTML5 fullscreen mode?
我正在使用HTML5 full_screen API将这个字母放大到浏览器的全屏模式。
按照https://bubbleideas.com/letters/html5-full_screen-api获取演示和复制步骤。
浏览器返回鼠标指针位置的(x,y)值的方式似乎有问题/错误。在全屏模式下,当你向下滚动时,鼠标指针和潦草的路径之间会引入偏移量。
以下是重现该问题的步骤。(到上面的演示链接)
-
点击本页右上方的按钮
-
点击右下角的"Free hand"绘图工具。它将打开一个文具面板(选择钢笔或铅笔工具)
-
在绘图区域涂鸦几次
-
现在向下滚动一点,试着用同样的笔涂鸦。您将注意到在鼠标指针位置和潦草的路径之间存在间隙/偏移(这就是问题所在)。理想情况下,在全屏模式下应该没有间隙
有人来过这里吗?还需要注意的是,这对于其他形状,如正方形、圆形和三角形,没有任何偏移,效果也很好。
更新:(根据"Iftah"在下面的评论中提出的要求)根据fabric js,我使用calcOffset()重新计算每次鼠标向下的偏移量。至于其他函数,我们是这样做的。希望这能给你一些启发
$("#rectangle-function").click(function (evt1) {
doCanvasUp();
initObjectDrawing();
//canvas.isDrawingMode = true;
canvas1 = document.createElement("canvas");
canvas1.height = canvas.height;
canvas1.width = canvas.width;
canvas1.id = "dummy-canvas";
canvas1.style.zIndex = 998;
canvas1.style.position = "absolute";
$(".page-body").prepend(canvas1);
$("#dummy-canvas").mousedown(function (evt) {
var context1 = canvas1.getContext("2d");
var offset = $("#dummy-canvas").offset();
startX = evt.pageX - offset.left;
startY = evt.pageY - offset.top;
context1.beginPath();
$("#dummy-canvas").mousemove(function (event) {
context1.clearRect(0, 0, canvas1.width, canvas1.height);
context1.strokeStyle = "#ff0000";
context1.lineWidth = 1;
context1.moveTo(startX, startY);
var offset1 = $("#dummy-canvas").offset();
var x = event.pageX - offset1.left;
var y = event.pageY - offset1.top;
var diffX = x - startX;
var diffY = y - startY;
context1.strokeRect(startX, startY, diffX, diffY);
context1.closePath();
context1.beginPath();
}).mouseup(function (eventf) {
$("#dummy-canvas").unbind('mousemove');
$("#dummy-canvas").unbind('mouseup');
var offset = $("#dummy-canvas").offset();
//$("#dummy-canvas").remove();
context1.clearRect(0, 0, canvas1.width, canvas1.height);
var endX = eventf.pageX - offset.left;
var endY = eventf.pageY - offset.top;
var diffX = endX - startX;
var diffY = endY - startY;
var rect = new fabric.Rect({
left: startX + diffX * 0.5,
top: startY + diffY * 0.5,
width: diffX,
height: diffY,
opacity: 1,
fill: null,
stroke: color
});
canvas.add(rect);
});
});
不查看你的代码是不可能准确地告诉错误在哪里…
一个问题可能是在读取鼠标坐标时,IE。您可能错误地使用了event。pageY而不是event。clientY或类似的混淆(参见screenX/Y, clientX/Y和pageX/Y之间的区别是什么?)
或者你可以说问题在于你如何使用这些坐标,ie。如果你在屏幕空间中获取鼠标事件坐标,那么在将其应用到画布上之前,你需要减去画布元素的屏幕偏移量并添加滚动偏移量…
既然你有一个工具可以工作,另一个不能,你可以比较它们,看看它们的不同之处
- d3.js鼠标悬停鼠标输出问题
- KineticJS鼠标事件问题
- javascript中的鼠标指针实时
- 鼠标指针和鼠标左键闪烁
- Jquery:当鼠标指针进入和离开元素时,创建一个弹出窗口
- 单击时更改鼠标指针,释放时返回
- 当用户将鼠标指针放在窗体按钮上时,该按钮必须更改颜色
- 为什么不起作用?用鼠标指针推框
- 如何修复鼠标指针的问题
- Unity 2d实例化鼠标位置问题,请告知
- 在鼠标指针下获取单词
- 如何使用javascript加载页面时将鼠标指针移动到页面顶部
- Sikuli可以观察到鼠标指针的变化吗?(响应式鼠标与无响应鼠标)
- 当鼠标指针放在图形区域内时,实时图形将停止
- 画布鼠标指针未同步
- 草图.js - 画笔从鼠标指针下方开始
- 在鼠标(指针设备)未处于活动状态(不移动)时隐藏按钮
- 子元素的 JavaScript 鼠标悬停/鼠标退出问题
- 如何修复HTML5全屏模式下画布上鼠标指针的偏移问题
- 鼠标指针附近显示信息问题