- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
const canv = document.getElementById('canvas');
const ctxt = canv.getContext('2d');
const w = canv.width;
const h = canv.height;
canv.addEventListener('mousemove', e => {
ctxt.clearRect(0, 0, canvas.width, canvas.height);
drawLine(e.clientX, 0, e.clientX, h);
drawLine(0, e.clientY, w, e.clientY);
})
function drawLine(x1, y1, x2, y2) {
ctxt.beginPath();
ctxt.moveTo(x1, y1);
ctxt.lineTo(x2, y2);
ctxt.stroke();
}
canvas {
border: 1px solid black;
width: 100%;
height: 100%;
}
<canvas id='canvas'></canvas>
e.clientX 和 e.clientY 无法正常工作(运行代码)。我该如何解决这个问题?
最佳答案
首先,您不应该使用 CSS 来设置 Canvas 的大小,而应该使用属性 width
和 height
。
其次,您应该使用相对鼠标位置(相对于 Canvas ),以便十字准线准确。为此,我们将使用 other SO answer 中的代码.
具体做法如下:
const canv = document.getElementById('canvas');
const ctxt = canv.getContext('2d');
const w = canv.width;
const h = canv.height;
const rect = canv.getBoundingClientRect();
canv.addEventListener('mousemove', e => {
const x = e.pageX - rect.left;
const y = e.pageY - rect.top;
ctxt.clearRect(0, 0, canvas.width, canvas.height);
ctxt.beginPath();
ctxt.moveTo(0, y);
ctxt.lineTo(w, y);
ctxt.moveTo(x, 0);
ctxt.lineTo(x, h);
ctxt.stroke();
});
/* drawLine is really not necessary */
canvas {
border: 1px solid black;
/* no sizing here */
}
<canvas id='canvas' width="640" height="480"></canvas>
注意:使用 pageX
和 pageY
而不是 clientX
和 clientY
,这样如果涉及滚动,您仍然可以获得准确的跟踪。 clientX
和 clientY
不考虑滚动,而 pageX
和 pageY
则考虑滚动。
关于javascript - 嘿!我试图让十字准线跟随我的鼠标,但 e.mouseX 和 e.mouseY 无法准确工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59706762/
我正在使用 AmCharts 制作随时间推移付款的图表。 我的 AmCharts 配置看起来正确。 另请注意,我不是 Javascript 专家。 使用 AmCharts 3.18.3.free 完整
我创建了一个带有小点的 Blob 。我希望我的 Blob 根据 mouseX 和 mouseY 在其表面显示噪音。我希望它在鼠标所在的象限中显示出高噪声。我想要它是波浪形的。下面是我的代码。 var
我有一个图像网格,这些图像被添加到一个类中的图像容器(Sprite)中。当我点击一个按钮时,图像容器被补间(缩放)到 0.2现在我想开始拖动图像。在鼠标按下时我添加一个 enterFrame 事件:
我确信这非常简单而且我很接近(大概)。我正在尝试根据鼠标的 X 位置在 10 个 div 之间切换(一次只显示一个)。 目前我已经将鼠标的 X 位置转换为一个百分比,并将其用作一个变量来根据光标的距离
我在 Flash Develop 中创建应该的非常简单的全屏拖放游戏。除了在一个令人沮丧的情况下,它工作正常。 我将项目添加到舞台,向它们添加 MOUSE_DOWN 监听器,并在听到该监听器时开始拖动
我正在使用 AmCharts 进行股票相关事件。我的控制台窗口中出现以下奇怪的错误。 Uncaught TypeError: Cannot read property 'mouseX' of unde
这是我的代码: const canv = document.getElementById('canvas'); const ctxt = canv.getContext('2d'); const w
我记得很久以前看到过一个函数完全可以做到这一点,但现在我需要它,但找不到它。本质上,我试图创建一个函数,根据 0 到 1920 之间的 mouseX 位置返回 -10 到 10 之间的数字。该数字可以
我是一名优秀的程序员,十分优秀!