javascript - 当 Canvas 全屏时,如何获取 HTML5 Canvas 上的鼠标位置?

标签 javascript canvas fullscreen

当 Canvas 非全屏时,以下代码可以完美运行。

    let canvas = document.querySelector('canvas');
    let ctx = canvas.getContext('2d');

    document.addEventListener('mousemove',e=>{
        let br = canvas.getBoundingClientRect();
        let mouseX = e.clientX - br.left;
        let mouseY = e.clientY - br.top;
    });

但是,在canvas.requestFullscreen()之后,变量mouseX、mouseY不再代表鼠标在 Canvas 上的位置。
有什么方法可以获取鼠标相对于 Canvas 的位置吗?

最佳答案

折腾了好久,终于找到了解决办法。

var FULLSCREEN = false;
document.onfullscreenchange = () => {FULLSCREEN = !FULLSCREEN};
// Keep Track of when Screen 

var mouseX=0,mouseY=0;

function map(v,n1,n2,m1,m2){
    return (v-n1)/(n2-n1)*(m2-m1)+m1;
}

doucment.addEventListener('mousedown',e=>{
        var x,y;
        var element = e.target;
        let br = element.getBoundingClientRect();
        if(FULLSCREEN){
            let ratio = window.innerHeight/canvas.height;
            let offset = (window.innerWidth-(canvas.width*ratio))/2;
            x = map(e.clientX-br.left-offset,0,canvas.width*ratio,0,element.width);
            y = map(e.clientY-br.top,0,canvas.height*ratio,0,element.height);
        } else {
            x = e.clientX - br.left;
            y = e.clientY - br.top;
        }
        mouseX = x;
        mouseY = y;
});

// Unfortunately this only works if the element is touching the top and bottom of the screen
// In other words, the ratio between the width and height of your screen must 
// be greater that the ratio of width to height for your element

关于javascript - 当 Canvas 全屏时,如何获取 HTML5 Canvas 上的鼠标位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62049700/

相关文章:

javascript - Canvas 因焦点丢失而停止重绘

javascript - 更改页面或刷新时失去全屏

辅助显示屏上的 cocoa 全屏窗口

iphone - Default.png显示在状态栏区域下方,想要使其全屏

javascript - 使用 AND if 语句的多个条件,javascript

javascript - 如何在 Javascript 日期对象中使用 AM PM 设置时间

javascript - 为不同的 HTML 形状填充颜色

javascript - 使用图像模拟重力的 2D 物理引擎

javascript - "Failed to load resource"使用 Facebook 的示例代码

javascript - 使用 Canvas 上下文变量定义位置的怪异行为,导致 Canvas 渲染卡住时,当标签不活动时