window.onmousedown()发生在window.oncontextmenu()

时间:2019-06-15 09:51:05

标签: javascript

我正在用JavaScript开发游戏,该游戏的特点是能够通过按住鼠标左键并在画布上四处移动光标来在屏幕上移动并创建墙。另一方面,通过右键单击,将创建一个项目符号。当通过右键单击创建一个项目符号时,也会出现问题,这也决定了要执行的window.onmousedown()函数。我不想通过在屏幕上单击鼠标右键来创建墙,因为右键单击只能创建项目符号,而不是墙,因为只能通过左键单击来创建墙。

我尝试创建一个名为wallCannotBeCreated的变量,默认情况下将其设置为false。在我看来,window.oncontextmenu()函数应该发生,当发生右键单击事件时,wallCannotBeCreated就变成真,以便window.onmousedown()函数变得“无法”创建任何新的墙,直到window.onmouseup()函数生效为止,wallCannotBeCreated再次变为false。不幸的是,它似乎不起作用,因为通常window.onmousedown()函数先于window.oncontextmenu()函数。

var wallCannotBeCreated = false;
window.oncontextmenu = function (e)
{
    //alert("right click was pressed");
    // a new bullet must be created
    bullets[++counterBullets] = new Bullet(player.x + player.r / 2, player.y, e.x, e.y);
    wallCannotBeCreated = true;
    console.log(wallCannotBeCreated);
}

window.onmousedown = function()
{
  console.log(wallCannotBeCreated);
  if(wallCannotBeCreated == false)
  {
    //console.log("mouse is being pressed");
    Keys.click = true;
    // one wall must be created
    walls[++wallNumber] = new Wall();
    walls[wallNumber].timerStart();
  }
}
window.onmouseup = function()
{
  //console.log("mouse was released");
  Keys.click = false;
  wallCannotBeCreated = false;
}

1 个答案:

答案 0 :(得分:-1)

如果这是您的意思(window.onmousedown()在window.oncontextmenu()之前发生),则可以尝试在鼠标按下时执行超时(setTimeout(myFunction,100))(脚本将等待100ms,并且可能会在等待时进行上下文处理,因为setTimeout是一个回调。

希望我能对您有所帮助。