【问题标题】:iPad Safari Event HandleriPad Safari 事件处理程序
【发布时间】:2011-07-21 09:35:53
【问题描述】:

假设我有一个包含多行的框/表。这些行是可拖动的。

现在我有一个 JS,我在其中为 iPad 的 touchstart、touchmove、touchend 实现了事件处理程序......基本上它们只是将这些事件映射到相应的鼠标事件,如 mouseover、mousedown、mouseup 等

现在这是我的问题;

虽然我可以从表格中拖动任何行,但我也希望能够滚动它。当我在屏幕上按下任何手指并向下拖动时,它会对该行执行拖动操作(因为我使用 event.preventDefault() 进行 touchmove 以防止默认滚动区域)。

现在我明白了,我不能用一个手指同时完成这两个动作(拖动/滚动).. 所以我想在使用两指时实现/有一个滚动动作..(另一种情况,即对于单指,它应该执行拖动动作)

现在我知道event.touches.length/event.targetTouches.length 在屏幕上没有手指,我不知道如何使用它来执行滚动操作...仅供参考,此滚动类似于我们在 iPad 上进行固定高度的 div 滚动 (overflow:auto),iPad 提供了开箱即用的功能..

【问题讨论】:

    标签: javascript ios mobile-safari dom-events


    【解决方案1】:

    您可以稍后触发 preventDefault,也可以选择触发。 首先确定是否需要自定义/拖动行为。

    类似这样的东西:(我不知道这个确切的代码是否可以工作,因为我现在无法测试它,这假设你使用 jQuery,我不知道手指数量的事件属性,但只是给出你有个主意:)

    $('#SomeElement').TouchMove(
       function(e)
         {
            if( /* number of fingers equals one */ )
            { 
              e.preventDefault()
              //more element-drag code could go here
              return;
            }
         }
    );
    

    【讨论】:

    • 感谢您的回复...但是我想要的是,如果没有。手指数大于 1,整个视图应该像手指滚动一样滚动...
    • 这意味着如果手指数只有一个,您需要阻止/停止默认事件,对吗?我有点困惑-_o
    • 或者你可以把项目放在它们自己的滚动框架中,这将默认启用两指滚动要求,但这可能会导致你的项目拖动问题行为。
    • 我想要的只是当屏幕上有 2 根手指时滚动整个页面......类似于你用 1 根手指得到的......
    • 就像我在之前的评论中所说的,其中一种方法是使用固定高度的滚动元素。如果您甚至不打算尝试这些事情并且只是对答案投反对票,那很好,但是请给我一个提示,这样我就不会再付出努力了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2011-08-24
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    相关资源
    最近更新 更多