我想检测用户是否在 ipad 或 iphone 上双击。
是否存在提供此功能的 javascript 事件?
我想检测用户是否在 ipad 或 iphone 上双击。
是否存在提供此功能的 javascript 事件?
这可用于双击或双击。在纯 javascript 中:
var mylatesttap;
function doubletap() {
var now = new Date().getTime();
var timesince = now - mylatesttap;
if((timesince < 600) && (timesince > 0)){
// double tap
}else{
// too much time to be a doubletap
}
mylatesttap = new Date().getTime();
}
一个基本的想法是这样做:
为了创建双击(或双击)事件,您需要在onClick
事件上创建代码。
您最可能想要双击/单击的原因是因为您已经将某些内容附加到onClick
事件,并且需要在同一元素上使用不同的手势。
这意味着您的onClick
事件应仅onClick
在 asetTimeout()
被确认后启动该事件。
因此,基本代码将onClick
使用setTimeout()
命令启动附加到事件的函数。第一次点击显示“setTimeout()
在说..500 毫秒之后使用启动计时器 + 运行功能。第二次点击时,您将检查第二次点击是否在特定时间范围内,以便计为双击。所以如果结束时间小于 500 毫秒,您将取消setTimeout()
使用clearTimeout()
,然后启动一个完全不同的功能(您想要双击/单击启动的功能)
停止默认操作?- 可能像stopPropagation()
或cancelBubble()
会做的伎俩。老实说,我不知道,但这就是我开始研究的地方。
在触摸设备上尝试以下代码片段
event.preventDefault()
将禁用双击缩放上div#double-tap
document.getElementById("double-tap").addEventListener("touchstart", tapHandler);
var tapedTwice = false;
function tapHandler(event) {
if(!tapedTwice) {
tapedTwice = true;
setTimeout( function() { tapedTwice = false; }, 300 );
return false;
}
event.preventDefault();
//action on double tap goes below
alert('You tapped me Twice !!!');
}
div#double-tap {
height: 50px;
width: 200px;
border: 1px solid black;
background-color: lightblue;
line-height: 50px;
text-align: center;
margin: 50px auto;
}
<div id="double-tap">Double Tap Me !!!</div>
我用 JavaScript 创建了这个,它似乎运行良好。(我在我的 iPad 2 上测试了它。)它基本上是上面所说的代码。
var clickTimer = null;
function touchStart() {
if (clickTimer == null) {
clickTimer = setTimeout(function () {
clickTimer = null;
alert("single");
}, 500)
} else {
clearTimeout(clickTimer);
clickTimer = null;
alert("double");
}
}
我在某个地方的 Stackoverflow 上找到了这个解决方案,但忘记了确切的帖子。它适用于在浏览器上双击并在 iPhone 上双击。
我'touchend click'
用来检测浏览器和 iPhone 上的双击。要仅在 iPhone 上实施,请删除点击。
var timeout;
var lastTap = 0;
$('element').on('touchend click',function(e){
var currentTime = new Date().getTime();
var tapLength = currentTime - lastTap;
e.preventDefault();
clearTimeout(timeout);
if(tapLength < 500 && tapLength > 0){
//Double Tap/Click
}else{
//Single Tap/Click
timeout = setTimeout(function(){
//Single Tap/Click code here
clearTimeout(timeout);
}, 500);
}
lastTap = currentTime;
});