【发布时间】:2012-01-10 03:36:44
【问题描述】:
它取决于操作系统/用户。不是浏览器,不是网站,而是操作系统决定双击的快慢。
我想在我的应用中使用该号码。有没有办法用 JS 得到那个数字?
简单的问题。可能是不可能的。
谢谢
【问题讨论】:
标签: javascript html double-click
它取决于操作系统/用户。不是浏览器,不是网站,而是操作系统决定双击的快慢。
我想在我的应用中使用该号码。有没有办法用 JS 得到那个数字?
简单的问题。可能是不可能的。
谢谢
【问题讨论】:
标签: javascript html double-click
我想在我的应用中使用该号码。有没有办法用 JS 得到那个数字?
绝对不是——像这样的东西超出了 JavaScript 的范围。
您可以通过要求用户双击来找出适用于双击的值,监听 click 事件并查看 dblclick event 是否被触发 - 我不确定是否事件不过,处理方式就是这样。但即使这样可行,距离真正找出实际价值还有很长的路要走。
【讨论】:
简单的回答:不,抱歉。
您可以做的最好的事情就是这样(示例使用 jQuery 只是因为它编写起来更快,如果 jQuery 不可用,原则仍然存在。另请注意,这可以很好地简化,这正是首先想到的):
var timer,
num = 0;
$("#example").click(function() {
/*This condition is required because 2 click events are fired for each
dblclick but we only want to record the time of the first click*/
if(num % 2 === 0) {
timer = (new Date()).getTime();
}
num++;
}).dblclick(function() {
var time2 = (new Date()).getTime(),
dblClickTime = time2 - timer;
});
不幸的是,这可能不是很有帮助。您可能能够记录 dblClickTime 值并检查最长的值,但这仍然不太可能是您所追求的实际值。这类事情是无法通过 JavaScript 实现的。
【讨论】:
+new Date 那样更快更短地执行(new Date()).getTime()。它位于jsperf 上的某个地方
=== 也是不必要的 =) 但它就像一个魅力。 jsfiddle.net/rudiedirkx/Wtt58/show 这几乎很有趣。我的 dblclick 时间 => 322 毫秒。 编辑哎呀,现在我们到了某个地方:464 毫秒。
=== 是不必要的,但这只是习惯。个人认为这是一种很好的做法。 +new Date 的好把戏,我喜欢这样。你说得对,就像游戏一样,我得到了 532ms!不过只有一次……从那以后没有超过大约 460 毫秒。
这是我 2015 年的解决方案,希望看到一个纯 js 版本。
var start;
var click = null;
$(document).click(function() {
var now = performance.now();
start = click ? click : now;
click = now;
}).dblclick(function() {
alert(performance.now()-start)
});
编辑
纯 JS
var start;
var click = null;
var getStart = function() {
var now = performance.now();
start = click ? click : now;
click = now;
}
var getStop = function() {
alert(performance.now()-start)
}
if (window.addEventListener) {
window.addEventListener('click', getStart , false);
} else {
window.attachEvent('onclick', function() {
return(getStart.call(window, window.event));
});
}
if (window.addEventListener) {
window.addEventListener('dblclick', getStop , false);
} else {
window.attachEvent('ondblclick', function() {
return(getStop.call(window, window.event));
});
}
【讨论】:
补充 James Allardice 的回答:
根据您的实现以及您正在寻找双击的位置,您可能还需要检查用户的鼠标位置(或者我猜是点击位置)。这是为了避免在用户单击页面不同部分上的内容时双击触发(再次取决于您的事件侦听器实现 - 例如,如果它只是在一个按钮上,这可能不是问题)。
当点击事件触发时,下面我的示例中的事件侦听器有两个变量e.clientX 和e.clientY。这将为您提供鼠标的位置。您可能需要检查用户自第一次单击后是否明显移动了鼠标(根据您的代码进行相应调整)。
document.addEventListener("click", function(e){ console.log("Mouse X: " + e.clientX + ": Mouse Y: " + e.clientY); });
您不希望它太紧,否则用户可能永远无法触发双击,并且您不希望它太松以致用户似乎随机触发双击。可能从第一次单击周围的 25 像素左右的框开始(这再次取决于您的应用程序)。您可以根据自己的用户界面进行测试和调整。
我假设你没有 jQuery 或者没有使用它,因为我相信 jQuery 可能已经做了这个计算来触发 dblclick
【讨论】:
答案 2021 - 据我所知 - 仍然没有。有一个原因:我们不应该在意。
原则上dblclick 在某种程度上已经过时了……
我们有不知名的detail 属性。也许是因为名字。
来自 MDN:
传递给单击事件处理程序的 MouseEvent 对象将其详细属性设置为目标被单击的次数。换句话说,详细信息将是 2 表示双击,3 表示三次单击,依此类推。该计数器在没有任何点击的情况下会在很短的时间间隔后重置;该间隔多长时间的具体细节可能因浏览器和平台而异。间隔也很可能受到用户偏好的影响;例如,可访问性选项可能会延长此间隔,以便更轻松地使用自适应界面执行多次点击。
detail 即。 click_count 可以在 detail != 1 时停止 CLICK 的传播
所以是伪代码:
if evt.detail==1
do_click()
if evt.detail==2
do_dblclick()
...
if evt.detail!=1
evt.stopPropagation()
如果有人真的需要区分点击、双击、三次点击……就像“异或”一样,他们真的应该重新考虑设计。
DblClickTime 可能会很长,这意味着如果用户只想点击操作,应用感觉就像没有响应。
另一个问题是,用户的意图可能是双击,但速度很慢 - 然后有两个点击动作,它们不应该与 dblclick 不同。
【讨论】: