计算一秒钟内的鼠标点击次数

时间:2013-08-09 17:32:52

标签: javascript qt qtscript

嗨,我正在开发一个我希望提高性能的应用程序。(我知道这个问题有点冗长 - 我道歉。)

我将详细解释一个仅使用qtscript / qscript(有点javascript)而不使用html的出价应用程序。

当用户点击按钮时,我想指向一个文本字段(对于普通用户来说,它可以是每秒-1或2次点击)。但是用户疯狂地点击按钮(每秒5-10次点击 - 是的,有些人点击这样),它会降低性能,例如显示的延迟时间,因为每次点击它都会指向文本字段。

我正在考虑一些解决方法,如果用户在1秒内点击超过3次,我们只在最后一次点击后调用焦点功能 - 如果你们知道更好的话,我不知道这是一个正确的解决方案请建议。另一个问题是我不能使用setInterval()和clearInterval()。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

example.xhtml - 没有框架,正文中没有脚本元素,只计算左右点击。

此外,您可以在匿名e.preventDefault();事件功能的末尾添加onclick。请记住,如果你试图保护内容,你最终会遇到任何聪明的人,如果它已经在他们的计算机上(内存,缓存等),他们已经拥有了它。如果您尝试保护图像,则必须使用水印。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Click Counter</title>

<script type="application/javascript">
//<![CDATA[
var click_left = 0;
var click_right = 0;

window.onclick = function(e)
{
 if (e.which==1) {click_left++;}
 else if (e.which==3) {click_right++;}

 alert('Left clicks: '+click_left+'\n\nRight Clicks: '+click_right);
}
//]]>
</script>
</head>

<body>

<div><p>Left or right click</p></div>

</body>
</html>

答案 1 :(得分:1)

我会看一下Underscore.js_.throttle函数。

_.throttle = function(func, wait, options) {
  var context, args, result;
  var timeout = null;
  var previous = 0;
  options || (options = {});
  var later = function() {
    previous = options.leading === false ? 0 : new Date;
    timeout = null;
    result = func.apply(context, args);
  };
  return function() {
    var now = new Date;
    if (!previous && options.leading === false) previous = now;
    var remaining = wait - (now - previous);
    context = this;
    args = arguments;
    if (remaining <= 0) {
      clearTimeout(timeout);
      timeout = null;
      previous = now;
      result = func.apply(context, args);
    } else if (!timeout && options.trailing !== false) {
      timeout = setTimeout(later, remaining);
    }
    return result;
  };
};

看起来很复杂,但一个基本的例子是:

var func = function(){alert("Only do this once every second");},
    throttled = _.throttle(func, 1000);

// Call func() three times in under a second, and
// you get 3 message boxes
func(); // alerts
func(); // alerts
func(); // alerts

// Call throttled() three times in under a second, and
// you only get a message box the first time
func(); // alerts
throttled(); // does nothing
throttled(); // does nothing

// ... wait >1 second ...
func(); // alerts
throttled(); // does nothing
throttled(); // does nothing

答案 2 :(得分:1)

首先,您应该添加检查,在用户点击某个按钮已经具有焦点后,您要选择的文本编辑。这将大大减少事件队列的负载。

其次,您可以实现自己的按钮(通过子类化)并使用选项,例如,忽略在特定(小)间隔内的点击。如果用户开始非常快速地产生点击,您还可以以某种方式在按钮上“显示”它,向用户显示您的应用程序对用户输入有限制反应,在指定超时后将其关闭。