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 必须提交两次表单才能验证