我在jQuery / JS中做了一些动画的东西,我想改变我的Pull_Push变量,这取决于LMB(鼠标左键)是否被按住。
现在我正在寻找一个例子,但只发现了.mousedown()和.mouseup()事件,但是当按下/释放按钮时它们似乎会触发。 我需要在这两者之间举办一场比赛。 (一边抱着)
这是我想我必须解决的部分:
var pull_or_push = "push";
$(document).on("mousedown", function () {
var pull_or_push = "pull";
});
$(document).on("mouseup", function () {
var pull_or_push = "push";
});
你看到了实现我想要的任何可能的方法吗?
答案 0 :(得分:3)
考虑使用requestAnimationFrame
在一个时间间隔内有效地运行代码。使用setInterval
或setTimeout
也可以使用,但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>