【问题标题】:Update mouse Y coordinates every 100ms每 100 毫秒更新一次鼠标 Y 坐标
【发布时间】:2011-10-08 00:23:45
【问题描述】:

我正在尝试将鼠标 Y 坐标保存到变量 startPosition 仅每 100 毫秒,而 .mousemove 处于活动状态,同时按住鼠标按钮 (mousedown),我的代码对我不起作用,我假设这是错误的?有人可以帮我解决这个问题吗?

    $(document).mousemove( function (e) {
        gesturesY = parseInt(e.pageY, 10);
        startPosition = setInterval(gesturesY, 100);
    });

编辑: 我认为这可能是一个全新的问题?很抱歉有任何混淆,下面是对我混乱的问题的澄清。 我们开始:

http://jsfiddle.net/nicktheandroid/PCgFK/1/

这个 JSfiddle 允许您抓取滚动框中的页面并向上或向下滚动,就像触摸屏手机一样。现在,如果你抓住页面(在滚动框区域)并向上移动鼠标(导致页面向下滚动),然后释放鼠标按钮,速度将启动并稍微跳转页面。当您实际抓取页面并向上或向下轻弹以滚动页面时,它就在那里,它可以使它缓慢而稳定地停止。如果这个人不轻弹,而是只是拖动页面,然后保持鼠标稳定并释放鼠标按钮,它就会跳转,就像我上面所说的那样。当人们抓住并拖动页面时,我试图摆脱这种跳跃,然后在鼠标静止时释放鼠标按钮。

我认为通过每 100 毫秒左右更新一次 startPosition,它可以消除这种跳跃,但仍然可以保持速度减慢,以免向上或向下滑动页面。我已经很接近完成了,但仍然存在我刚才所说的问题。其他人帮助我添加了速度,在脚本中有一个名为 velocityCheckWait 的变量,我认为它的作用与我想要的相反。

如有任何困惑,我们深表歉意,并感谢任何愿意花时间帮助我的人。

【问题讨论】:

  • 你的代码在很多层面都是错误的。请更详细地解释您要做什么。例如,您的代码尝试在mousemove 事件之后开始跟踪鼠标——为什么?你的描述没有提到。
  • 这不是你使用setInterval的方式。你绝对没有理由在那里使用parseInt。您可能应该阅读更多关于一些基本 JavaScript 的内容。看看这个网站developer.mozilla.org/en/JavaScript

标签: jquery mouse coordinates


【解决方案1】:

没有什么可以真正做你想做的事;最好的模拟方法是下面的代码:

var currentPosition = 0;

$(document).mousemove(function (e) {
    currentPosition = e.pageX;
});

setInterval(function () {
    startPosition = currentPosition;
}, 100);

这会不断更新鼠标位置,但仅每 100 毫秒将其更新为您想要的变量(同时,它会更新另一个变量 currentPosition

如果您只是出于性能方面的担忧而只想每 100 毫秒更新一次位置,首先,我会再次确认您现在并没有低估计算机的功能。但是,如果这是一个有效的问题,下面的代码会帮助你:

var startPosition = 0;

$(document).mousemove(function (e) {
    startPosition = e.pageX;
});

setInterval(function () {
    // read in startPosition and do your **intensive** task here.
}, 100);

在这里,startPosition 一直在更新,但您只是每 100 毫秒执行一次间隔。

【讨论】:

  • 我认为你的意思是低估
【解决方案2】:

您需要将鼠标移动事件的位置存储在一个变量中,然后每 100 毫秒将该值放入另一个变量中:

var mouseY;
$(document).mousemove(function(e) {
    mouseY = e.pagey;
});

var startPosition;
setInterval(function() {
    startPosition = mouseY;
}, 100);

您的示例表明缺乏对基本 JavaScript 的理解。如果您不理解我的示例,请在 cmets 中提问,我很乐意为您解释。

【讨论】:

  • 那么这只会在执行.mousemove 时更新startPosition 变量吗?我没有理由需要它一直运行,让它不断运行对我来说只是一种浪费。即使我像上面的答案所说的那样低估了计算机能力的力量,如果它不需要一直发生,那么就没有理由这样做。由于缺乏睡眠,我对 Javascript 的简单理解有些生疏,所以请原谅我目前的无知。
  • 这将在每次移动鼠标时更新 mouseY 变量,并且每 100 毫秒更新一次 startPosition 变量。在鼠标移动时设置变量是微不足道的。根据您使用它进行的计算,您可能将其限制在 100 毫秒是正确的。在任何情况下,mouseY 将始终具有正确的鼠标 y 值,并且 setInterval 中的函数将每 100 毫秒调用一次。