jquery $.on() 和使用 date() 时处理奇怪行为的触摸事件

Posted

技术标签:

【中文标题】jquery $.on() 和使用 date() 时处理奇怪行为的触摸事件【英文标题】:jquery $.on() and touch event handling odd behavior when using date() 【发布时间】:2012-09-17 12:17:25 【问题描述】:

为了在移动设备上实现“长按”,我从一个简单的事件映射开始,其中touchstart 设置一个时间,touchend 设置另一个,然后计算差异以了解如何长元素被按下。这是我的旧代码:

        $('html')
            .on(
                touchstart : function(e)
                    g.tt.start = new Date();
                ,
                touchend : function(e)
                    g.tt.end = new Date();
                    g.tt.delta = g.tt.end - g.tt.start;
                    alert(g.tt.delta);
                    g.tt = ;
                
            )
        ;

但不幸的是……

...每隔一次按下都会计算从前一个触摸结束到触摸开始的差异。我很确定我缺少一些基本的东西,因此最终过度设计了这个(我害怕没有正式的培训)。这是我的新代码:

        $('html')
            .on(
                touchstart : function(e)
                    g.tt = ;
                    g.tt.start = new Date();
                ,
                touchend : function(e)
                    g.tt.end = new Date();
                    g.tt.delta = g.tt.end - g.tt.start;
                    if( isNaN(g.tt.delta) == false ) 
                        alert(g.tt.delta);
                     
                    else 
                        return false;
                    
                    setTimeout(function()g.tt = ; );
                
            )
        ;

难道不应该有一个更简单的方法来使用更少的子句吗?别介意我有趣的g.tt 变量名。

【问题讨论】:

出于好奇,您不喜欢处理这类事情的jqTouch 吗? 它做了非常具体的事情。我认为它很棒,但它不符合我的需求。 【参考方案1】:

我意识到我采取了错误的方法,并且还找到了一个不错的插件:

http://aanandprasad.com/articles/jquery-tappable/

【讨论】:

【参考方案2】:

你是在计时两个事件之间的差异,所以不需要使用setTimeout,只需使用闭包来共享两个事件之间的一些变量。这个例子取自这个answer:

(function () 
  var start, end;
  $('html').on(
    touchstart : function(e)
      start = +new Date(); // get unix-timestamp in milliseconds
    ,
    touchend : function(e)
      end = +new Date();
      g.tt.delta = end - start;
      if( isNaN(g.tt.delta) == false ) 
        alert(g.tt.delta);
      
    
  );
)();

这是demo showing this with mouse events and touch events

【讨论】:

看,但就像我的原始代码一样,您的解决方案也会导致计算第二次抽头。出于某种原因,它只适用于其他触摸。 为什么 new Date() 前面有一个+? 从对链接答案的评论中,“它只是进行类型转换(到数字),有关更多详细信息,请参见以下答案:***.com/questions/1983040/…”我发现这种方法相当优雅。我还创建了一个基于触摸的演示并在我的 ipad 上进行了测试,似乎对我有用

以上是关于jquery $.on() 和使用 date() 时处理奇怪行为的触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 .on 和 .validate 的 jQuery 必须提交两次表单才能验证

jQuery 的 datepicker 日期和日期逻辑

Ruby On Rails:jQuery datepicker 仅在刷新页面时有效

数据库日期和 jquery 日期验证

.on() jQuery 1.7 和 1.8 的区别

jQuery on()方法