我正在玩iPhone上的touchstart和touchend活动。我创建了一个具有div的示例页面,如果您触摸它并滚动页面,它将返回起始位置和结束位置的y坐标。

链接:http://jsbin.com/ibemom/2

jQuery:

var touchStartPos;

$('.theDiv')
  .bind('touchstart',function(e){
    touchStartPos = e.pageY;
  })
  .bind('touchend',function(e){
    alert(touchStartPos + ' | ' + e.pageY)
  })

但是,当我在iPhone上加载该页面时,警报会将这两个值都报告为零。任何人看到我有什么问题吗?

更新:

我在jQuery Mobile项目:https://github.com/jquery/jquery-mobile/issues/734中偶然发现了这一段代码

从它的评论出发:

// (in iOS event.pageX and event.pageY are always 0 )

这不是说为什么会这样,但至少我发现别人看到同样的事情。将浏览该页面上的示例代码,以查看解决方案是否存在。

更新二:

那么,在查看上面的链接中的示例代码之后,它将会返回一个实际的值:

e.originalEvent.touches[0].pageY

抓住的是,我现在意识到这不是我需要的。它将我所附加事件的对象中我所触摸的区域的Y偏移量返回到与HTML文档相关的…而不是浏览器窗口。

我的目标是找出屏幕上触摸开始的位置,以及它在哪里结束…然后比较值。如果他们有点不一样,那么我们发现刷卡被执行了,而不是触摸。

更新三:

我也在寻找这些例子:

e.originalEvent.touches[0].pageX

event.targettouches[0].pageY

虽然我似乎也不能让那些工作。两者都返回未定义的错误。

更新四:

看起来像一个解决方案是跟踪文档本身的offset()。我可以对文档应用touchend事件,然后检查它的偏移量。

这个问题是我的touchend事件将首先触发我的页面上的元素,然后它会在文档(冒泡)上触发它。所以我不能确定是否触摸或滑动之前,我需要弄清楚在对象touchend事件做什么。

还在思考这个…

解决方法

好的,快速的答案是,当手指离开屏幕(touchend)时,您无法检测到触摸。

我的第一个例子证明:http://jsfiddle.net/Y4fHD/

现在到解决方法。或者称之为你想要的也许没有检测到触摸事件是有意义的,因为触摸已经结束。

在touchmove事件上绑定处理程序:http://jsfiddle.net/Y4fHD/1/

var endCoords = {};
$(document.body).bind("touchmove",function(event) {
    endCoords = event.originalEvent.targettouches[0];
});

然后使用变量endCoords来确定最后的触摸

$(document.body).bind("touchend",function(event) {
    $('p').text("Your end coords is: x: " + endCoords.pageX + ",y: " + endCoords.pageY);
});

好的,只需点击您的设备!那么错误仍然会发生:为什么?因为你没有移动你的触摸

如果我们都准备好在touchstart中定义endCoords变量我们在那里:http://jsfiddle.net/Y4fHD/2/

var endCoords = {};
$(document.body).bind("touchstart touchmove",y: " + endCoords.pageY);
});

现在尝试点击您的设备!

一些最后的注释将是:Make to variables:startCoords和endCoords然后在touchend事件中使用这些:http://jsfiddle.net/Y4fHD/3/

var startCoords = {},endCoords = {};
$(document.body).bind("touchstart",function(event) {
    startCoords = endCoords = event.originalEvent.targettouches[0];
});
$(document.body).bind("touchmove",function(event) {
    endCoords = event.originalEvent.targettouches[0];
});
$(document.body).bind("touchend",function(event) {
    $('p').text("Your touch on the axis: " + Math.abs(startCoords.pageX-endCoords.pageX) + "x," + Math.abs(startCoords.pageY-endCoords.pageY) + "y");
});

注意:以上示例都没有被测试,希望它有效!Math.abs给我一个数字的绝对值,例如:-5变成5

jQuery(Swipe vs. Touch)pageX和pageY保持返回0的更多相关文章

  1. 详解使用postMessage解决iframe跨域通信问题

    这篇文章主要介绍了详解使用postMessage解决iframe跨域通信问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码

    这篇文章主要介绍了HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  4. 浅谈html5之sse服务器发送事件EventSource介绍

    本篇文章主要介绍了浅谈html5之sse服务器发送事件EventSource介绍,具有一定的参考价值,有兴趣的可以了解一下

  5. HTML5 拖放(Drag 和 Drop)详解与实例代码

    本篇文章主要介绍了HTML5 拖放(Drag 和 Drop)详解与实例代码,具有一定的参考价值,有兴趣的可以了解一下

  6. ios – Swift中的非响应流委托

    所以我在Swift中使用套接字并试图将应用程序与我的服务器连接起来.我让应用程序连接到服务器的IP地址,并在服务器上使用netcat进行测试.在执行期间,应用程序的控制台输出显示它已成功连接到服务器.但是,流委托似乎没有响应.当我输入netcat时,app控制台没有打印任何内容.我已经搜索了很长一段时间,发现我的实现与其他实现非常相似.也许我在这里遗漏了一些我看不到的东西.任何想到这个问题的人都将不胜感激!

  7. ios – UIScrollView内容不允许用户交互

    我有一个启用了分页的UIScrollView,如下所示:在UIScrollView中,我添加了几个UIWebViews,并将其启用的交互设置为是这样的.它打破了UIScrollView上的分页和所有触摸.如果我将用户交互设置为NO,则页面有效,但我无法在UIWebView中突出显示文本.我试着像下面那样对UIScrollView进行子类化,但是会出现同样的情况.任何的想法?

  8. ios – 如何知道用户在iPhone中的播放控件上单击快进和快退按钮

    还是有其他方法吗?

  9. ios – 如何在使用隐式动画为CALayer设置动画时继承动画属性

    我试图使用隐式动画在CALayer上设置自定义属性的动画:在-actionForKey:方法我需要返回动画,负责插值.当然,我必须以某种方式告诉动画如何检索动画的其他参数.有关如何实现这一点的任何想法?

  10. ios – touchesMoved在iPhone 6s及以后的单点击中被调用

    解决方法可能是更高分辨率的屏幕对任何移动都更敏感.当你敲击时,你实际上可能正在滚动你的手指,使它看起来像一个小动作.两种可能的解决方>在touchesMoved:方法中检查触摸移动了多远.如果这是一个非常小的举动,请忽略它以进行_isTapped检查.>而不是覆盖触摸…

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部