使用javascript检测ipad或iphone屏幕上的双击

IT技术 javascript ios ipad events
2021-02-27 20:29:25

我想检测用户是否在 ipad 或 iphone 上双击。

是否存在提供此功能的 javascript 事件?

6个回答

这可用于双击或双击。在纯 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();

}
有趣的解决方案。我想知道哪个更有效,设置/清除超时或这个。
2021-04-24 20:29:25
快速建议:if (mylatesttap === undefined) { mylatesttap = new Date().getTime(); }在函数的开头添加您可能还想抛出一个setTimeout(singleTap, doubleTapTimeout + 10)where doubleTapTimeout 将以毫秒为单位的超时(在答案的示例中,这将是600)并且singleTap是一个检查双击是否已实现的函数(这将需要窗口下的另一个“全局”变量变量(这样,如果双击成功 - 您有// double tap评论的地方 - 它会true存储在其中)。干杯和谢谢
2021-04-30 20:29:25
@raypixar:这正是 Jorge 所说的,也是提问者想要的
2021-05-11 20:29:25
@raypixar:基本上条件的“其他”部分是单击
2021-05-14 20:29:25
@Tharama 没有单击检测的双击检测没有意义。两者都应该被检测到。
2021-05-15 20:29:25

一个基本的想法是这样做:

  1. 为了创建双击(或双击)事件,您需要在onClick事件上创建代码

  2. 您最可能想要双击/单击的原因是因为您已经将某些内容附加到onClick事件,并且需要在同一元素上使用不同的手势。

  3. 这意味着您的onClick事件应仅onClick在 asetTimeout()被确认启动该事件

  4. 因此,基本代码将onClick使用setTimeout()命令启动附加到事件的函数第一次点击显示“setTimeout()在说..500 毫秒之后使用启动计时器 + 运行功能。第二次点击时,您将检查第二次点击是否在特定时间范围内,以便计为双击。所以如果结束时间小于 500 毫秒,您将取消setTimeout()使用clearTimeout(),然后启动一个完全不同的功能(您想要双击/单击启动的功能)

  5. 停止默认操作?- 可能像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> 

也许您需要添加 event1.pageX - event0.pageX < xx 以避免两指触摸触发双击。
2021-04-27 20:29:25

我用 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");

    }
}
不错,下次试试!
2021-05-17 20:29:25
是的,目前这个解决方案仍然有效。我在 Ipad Air 2 上试过。谢谢
2021-05-17 20:29:25

我在某个地方的 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;
});