gpt4 book ai didi

javascript - 设置缩放时 Canvas x、y 位置 (JS) 上的问题

转载 作者:行者123 更新时间:2023-11-30 19:38:54 24 4
gpt4 key购买 nike

我正在通过鼠标事件在 Canvas 上绘图。

我想通过使用将正文标签缩放大小设置为 80% 左右

document.body.style.zoom = '80%';

但是当我使用这段代码时:

X,Y位置不对。

这是代码。

function canvasX(clientX) {

var bound = canvas.getBoundingClientRect();

return (clientX - bound.left) * (canvas.width / bound.width);

}


function canvasY(clientY) {

var bound = canvas.getBoundingClientRect();

return (clientY - bound.top) * (canvas.height / bound.height);

}

尝试将 layerX、layerY 作为参数,但效果不佳。

位置设置得更靠左(-)和靠上(-)。

如果你能帮我在鼠标位置上应用缩放大小,那就太好了。

最佳答案

这是一种方式

const canvas = document.querySelector('#container canvas');
const ctx = canvas.getContext('2d');
let count = 0;

canvas.addEventListener('mousemove', (e) => {
const pos = getElementRelativeMousePosition(e, canvas);
ctx.fillStyle = hsl((count++ % 10) / 10, 1, 0.5);
ctx.fillRect(pos.x - 1, pos.y - 1, 3, 3);
});

[...document.querySelectorAll('button')].forEach((elem) => {
elem.addEventListener('click', (e) => {
document.body.style.zoom = `${elem.textContent}`;
});
});

function getElementRelativeMousePosition(e, elem) {
const rect = elem.getBoundingClientRect();
const css = getComputedStyle(document.body);

return {
x: e.clientX / css.zoom - rect.left,
y: e.clientY / css.zoom - rect.top,
};
}

function hsl(h, s, l) {
return `hsl(${h * 360 | 0},${s * 100 | 0}%,${l * 100 | 0}%)`;
}
canvas { 
display: block;
}
#container {
margin: 20px;
border: 1px solid black;
display: inline-block;
}
<div>
<button type="button">50%</button>
<button type="button">75%</button>
<button type="button">100%</button>
<button type="button">125%</button>
<button type="button">150%</button>
</div>
<div id="container">
<canvas></canvas>
</div>

但请注意 zoom is a non-standard property and is not supported in all browsers . Firefox 完全不支持它。

关于javascript - 设置缩放时 Canvas x、y 位置 (JS) 上的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55625104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com