javascript - 使用鼠标坐标制作动画时的requestAnimationFrame

标签 javascript canvas

将使用 requestAnimationFrame(animate) 调用的动画函数 但在 animate 函数中,我调用 is_inside ,当发生这种情况时,当我想要获取 wx 和 wy 时,我在 is_inside 函数中收到错误:未捕获的类型错误:无法读取未定义的属性“clientX” 知道如何解决这个问题吗?谢谢

function animate(event){ 
    targetX = event.clientX - canvas.getBoundingClientRect().left; 
    targetY = event.clientY - canvas.getBoundingClientRect().top; 
    canvas.style.cursor = "pointer";
    if(clicked!=true){
        if(is_inside(pointx,pointy)){
            move();
        }else{
            canvas.style.cursor = "auto";
            moveLeft();
        }
    }   
}

function is_inside(x,y){

    var wx = event.clientX - canvas.getBoundingClientRect().left;
    var wy = event.clientY - canvas.getBoundingClientRect().top;
    var distance = Math.sqrt((wx-x-400)*(wx-x-400) + (wy-y-300)*(wy-y-300));
    if(distance < 35){
        return true;
    }else {
        return false;
    }
}


canvas.addEventListener('mousemove', animate, false);

最佳答案

这是因为您无权访问请求的帧回调中的任何事件。您需要在 mousemove 事件中存储鼠标位置,然后在 animate 中使用它功能

var mousePosition = {x: 0, y: 0};

canvas.addEventListener('mousemove', event => {
    mousePosition.x = event.clientX;
    mousePosition.y = event.clientY;
}, false);

然后代替 event.clientXevent.clientY使用mousePosition.xmousePosition.y分别

关于javascript - 使用鼠标坐标制作动画时的requestAnimationFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38809205/

相关文章:

javascript - 在浏览器上呈现转义的 XML

html - Canvas - 合并两张图片,返回一个 img html 对象?

javascript - Paperjs : Canvas height and width gets changed on window resize. 如何防止更改?

javascript - KineticJS 图像不能在本地工作,有时在线工作

javascript - 如何使用 Canvas 绘制圆形按钮?

javascript - 如果禁用了javascript,如何禁用网站

javascript - 使用 React native 将图像固定在 ScrollView 中

javascript - 谷歌可视化错误类型错误

javascript - AWS Cognito 注册方法上的异步执行错误

javascript - html5 canvas pacman 游戏 - javascript 太多递归