Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算一秒钟内鼠标单击的次数_Javascript_Qt_Qtscript - Fatal编程技术网

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

Javascript 计算一秒钟内鼠标单击的次数,javascript,qt,qtscript,Javascript,Qt,Qtscript,嗨,我正在开发一个我想提高性能的应用程序。(我知道这个问题有点长,我道歉。) 我将详细解释它是一个只使用qtscript/qscript(类似javascript)而不使用html的投标应用程序 当一个用户点击一个按钮时,我想指向一个文本字段(对于一个普通用户来说,可以是每秒点击1或2次)。但是用户疯狂地点击按钮(每秒5-10次点击-是的,有些人就是这样点击的),这会降低性能,比如显示延迟量,因为每次点击都指向文本字段 我正在考虑一些解决方法,比如如果用户在1秒内点击超过3次,我们只在最后一次点

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

我将详细解释它是一个只使用qtscript/qscript(类似javascript)而不使用html的投标应用程序

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

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


任何帮助都将不胜感激。

示例。xhtml-没有框架,正文中没有脚本元素,并计算左键和右键单击次数

此外,您还可以添加
e.preventDefault()onclick
事件函数末尾的code>。请记住,如果您试图保护内容,您最终将无法抵御任何足够聪明的人,他们会意识到,如果内容已经在他们的计算机上(内存、缓存等),那么他们已经拥有了它。如果您试图保护图像,则必须使用水印

<?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>

点击计数器
//
左键或右键单击


示例。xhtml-正文中没有框架,没有脚本元素,并且计算左键和右键单击次数

此外,您还可以添加
e.preventDefault()onclick
事件函数末尾的code>。请记住,如果您试图保护内容,您最终将无法抵御任何足够聪明的人,他们会意识到,如果内容已经在他们的计算机上(内存、缓存等),那么他们已经拥有了它。如果您试图保护图像,则必须使用水印

<?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>

点击计数器
//
左键或右键单击

我想看看的
油门功能

_.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;
  };
};
我想看看的
\节流阀
功能

_.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;
  };
};

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


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

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


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

使用数组计算每个索引代表100ms的单击次数(使用超时更改当前索引,mod array length),使其尽可能长(至少一秒钟),对其执行平均值。您能在第一次单击后暂时禁用按钮吗?@PaulS。谢谢……我会试试的。抱歉,Jeffman,这是一个竞标应用程序,所以几秒钟的时间非常重要(客户会抱怨只损失了1美元)。使用数组计算每个索引代表100ms的点击次数(使用超时更改当前索引,mod array length),使其尽可能长(至少一秒钟),对它进行平均。你能在第一次点击后暂时禁用按钮吗?@PaulS。谢谢……我会试试的。抱歉,Jeffman,这是一个竞价应用程序,所以几秒钟的时间非常重要(客户会抱怨只损失了1美元)。谢谢John,我非常感谢您的帮助,不幸的是,我的应用程序中没有使用HTML,它不支持本机javascript功能,如alert、window.onclick events等。谢谢您的时间。谢谢John,我真的很感谢您的帮助,不幸的是我的应用程序中没有使用HTML,它不支持本地javascript函数,如alert、window.onclick events等。谢谢你抽出时间。