JS / jQuery WHILE按住LMB事件

时间:2018-03-20 14:06:41

标签: javascript jquery mouseevent

我在jQuery / JS中做了一些动画的东西,我想改变我的Pull_Push变量,这取决于LMB(鼠标左键)是否被按住。

现在我正在寻找一个例子,但只发现了.mousedown()和.mouseup()事件,但是当按下/释放按钮时它们似乎会触发。 我需要在这两者之间举办一场比赛。 (一边抱着)

您可以查看complete Code on CodePen

这是我想我必须解决的部分:

var pull_or_push = "push";
$(document).on("mousedown", function () {
    var pull_or_push = "pull";
});
$(document).on("mouseup", function () {
    var pull_or_push = "push";
});

你看到了实现我想要的任何可能的方法吗?

1 个答案:

答案 0 :(得分:3)

考虑使用requestAnimationFrame在一个时间间隔内有效地运行代码。使用setIntervalsetTimeout也可以使用,但requestAnimationFrame专门用于此类事情。

在下面的示例中,doSomething函数只有在调用mousedown后才会开始运行,然后在调用mouseup后停止运行。但您可以轻松地通过在这些事件之外调用doSomething函数来使代码始终运行。这样,只需检查pull_or_push的状态,你可以在按下LMB时执行某些操作,并在未按下LMB时执行其他操作。

另请注意,在mouseup和mousedown回调中,您重新声明pull_or_push而不是修改全局变量(只需删除var)。

var pull_or_push = "push";
var request;

$(document).on("mousedown", function () {
    pull_or_push = "pull";
    doSomething();

});
$(document).on("mouseup", function () {
    pull_or_push = "push";
    cancelAnimationFrame(request)
});

function doSomething(dt){
  console.log("Doing something")
  request = requestAnimationFrame(doSomething)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>