【问题标题】:jQuery mobile- For every live tap event should there be an equivalent click event?jQuery mobile-对于每个实时点击事件是否应该有一个等效的点击事件?
【发布时间】:2011-09-08 07:29:17
【问题描述】:

我已将 jQuery 实时点击事件替换为 jQuery 移动点击事件以提高响应能力。

出于兼容性原因,我觉得这是个坏主意。

是否有必要同时拥有两个事件,有没有办法为同一个函数编写它们?

如('click','tap')

【问题讨论】:

    标签: jquery jquery-selectors jquery-mobile


    【解决方案1】:

    Billy 的答案非常完整,并且在我使用它的几次之后实际上效果很好。但是,另外,您可能想查看 JQuery Mobile 中的 vmouse 插件,它是一种抽象鼠标事件的尝试:

     // This plugin is an experiment for abstracting away the touch and mouse
     // events so that developers don't have to worry about which method of input
     // the device their document is loaded on supports.
    

    -- https://github.com/jquery/jquery-mobile/blob/master/js/vmouse.js

    我在我正在处理的一个项目中一直在使用它,这些天它似乎反应灵敏。要使用,例如:

    $('selector').bind('vclick', function () { ...
    

    $('selector').bind('vmousedown', function () { ...
    

    【讨论】:

    • Billy 的回答很好,但这个解决方案要容易得多。我已经集成了它。谢谢
    • J.T. 的回答是正确的方法。如果你实现了其他东西 - 请重新考虑。
    • 谢谢,这确实提高了我的应用程序的响应能力。
    • 当前的 JQM 版本还需要 vmouse 库吗?该文档在虚拟鼠标事件下包含一个“vclick”事件。这是同一件事吗?
    • 好的,哇,所以我已经检查了所有这些工作需要什么。我以前从未见过任何 JS 如此臃肿的垃圾解决方案。您需要加载 2 个臃肿的 JS 文件才能在智能手机上触发一些事件?算了。@JT,这是一个糟糕的解决方案。
    【解决方案2】:

    您可以像这样在一次调用中绑定多个事件:

    $('selector').bind('click tap',function(){ ... })
    

    这在某些浏览器/移动设备中可能没问题,但是,这可能会使事件在触发点击和点击的某些设备上触发两次。

    您可以通过执行某种设备/功能检测并仅像这样添加适当的处理程序来解决此问题...

    $('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... })
    

    此外,我认为touchstartmousedown 是更好的选择。这是因为,在触摸之后,单击事件直到经过延迟才会触发,因为系统允许第二次触摸使其成为双击或成为滑动手势等。 touchstart 事件会立即触发,mousedown 也会立即触发,因此响应速度会更快。

    【讨论】:

    • mousedown 会像移动设备上的“点击”一样响应吗?我宁愿使用一个事件并避免为设备检测创建功能,毕竟我的移动布局仅依赖于分辨率
    • 我会创建一个函数来检测它是否启用了触摸,然后使用touchstartmousedown。没有必要详细了解它是哪个设备。这可能是确保您获得最快响应跨平台的最简单方法。检测启用触摸的设备就像检查是否定义了Touch 一样简单。所以像这样:(typeof Touch !== "undefined") ? 'touchstart' : 'mousedown'
    • “Touch”显然没有在所有移动设备上定义。例如,Android 2.3.4 的浏览器。
    • 你知道Android的2.3.4浏览器是否定义了“mousedown”吗?它可能会相当优雅地降级。否则是否有另一种更全面的方法来确定它是否是触摸屏设备。另外,如果没有触摸事件,我可以假设没有要绑定的 touchstart 吗?
    • 太好了,完美运行。不知道为什么上面的英国媒体报道软件在这个主题问题上超过了你。
    【解决方案3】:

    我们开发了一个小脚本来解决这个问题。只需将它包含在全局级别上,您的点击事件就会立即触发,而延迟事件不会出现任何问题。

    https://github.com/cargomedia/jquery.touchToClick

    【讨论】:

      【解决方案4】:

      似乎 jQuery mobile 已经有一个事件可以做到这一点:

      $(function(){
          $('selector').bind('vclick', function(e){
              alert('test');    
              return false;
          });
      });
      

      【讨论】:

        【解决方案5】:

        您可以使用 jQuery 中的 vmouse 插件。这将解决点击事件的 300 毫秒延迟(仅限移动设备)以及同时触发点击和触摸事件的情况。

        要仅获取 vmouse 插件,请使用 jQuery Mobile Download Builder。将它包含在 jQuery 之后,但在任何依赖此插件的脚本之前。

        相关事件为vclick,基本使用如下:

        $(".selector").on( "vclick", function( event ) {
            // To execute
        });
        

        【讨论】:

        • +1 仅用于 vmouse 自定义构建!不是 jQuery mobile 的粉丝,但这个 4kb 的缩小版本是轻量级的,并且完全符合我的需要。
        • 请注意 vclick 也会捕获右键单击事件,因此您可能希望在开发过程中检测到它以保持您自己的理智:.on("vclick",function (e) {alert(e.其中)});
        • 很高兴我发现了这个!回到我所有的 PGB 应用程序并确保我包含了这个......我曾认为 iPhone 只是缓慢的自动对焦。大声笑
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-10
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        • 1970-01-01
        相关资源
        最近更新 更多