如何绑定'touchstart'和'点击'事件,但不能两者反应

 我来答
huanglenzhi
2014-12-10 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517195
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  1. 结合两者,但做一个标志,这样的函数只触发一次,每100毫秒左右。 var flag = false;
    $thing.bind('touchstart click', function(){
    if (!flag) {
    flag = true;
    setTimeout(function(){ flag = false; }, 100);
    // do something
    }

    return false
    });




    2. 你可以尝试这样的: var clickEventType=((document.ontouchstart!==null)?'click':'touchstart');
    $("#mylink").bind(clickEventType, myClickHandler);




    3.
    这是我“创造”,并拿出GhostClick和FastClick修复。试试在你自己的,并知道它的工作适合你。 $(document).on('touchstart click', '.myBtn' function(event){
     event.stopPropagation();
     event.preventDefault();
     if(event.handled !== true) {

      // Do your magic

      event.handled = true;
     } else {
      return false;
     }
    });




    4. 通常这个工程,以及: $('#buttonId').on('touchstart click', function(e){
    e.stopPropagation(); e.preventDefault();
    //your code here

    });




    5. 余由以下方法。 易Peasy ... $(this).bind('touchstart click', function(){
    e.preventDefault();
    //do your stuff here
    });




    6. 检查快速按键和点击CHOST从谷歌

    7.
    一般来说,你不想混了默认的触摸和非触摸(点击)API.a旦你进入触摸的世界更容易只与触摸相关的功能处理。下面是伪代码,会做你想要它。
    如果你在的TouchMove事件连接和跟踪的位置,您可以添加在doTouchLogic功能更多的项目来检测手势和诸如此类的东西。 var touchStartTime;
    var touchStartLocation;
    var touchEndTime;
    var touchEndLocation;

    $thing.bind('touchstart'), funcion() {
     var d = new Date();
     touchStartTime = d.getTime();
     touchStartLocation = mouse.location(x,y);
    });

    $thing.bind('touchend'), funcion() {
     var d = new Date();
     touchEndTime= d.getTime();
     touchEndLocation= mouse.location(x,y);
     doTouchLogic();
    });

    function doTouchLogic() {
     var distance = touchEndLocation - touchStartLocation;
     var duration = touchEndTime - touchStartTime;

     if (duration <= 100ms && distance <= 10px) {
      // Person tapped their finger (do click/tap stuff here)
     }
     if (duration > 100ms && distance <= 10px) {
      // Person pressed their finger (not a quick tap)
     }
     if (duration <= 100ms && distance > 10px) {
      // Person flicked their finger
     }
     if (duration > 100ms && distance > 10px) {
      // Person dragged their finger
     }
    }




    8.
    另一个更好的维护。然而,该技术也将做event.stopPropagation()。点击是没有抓到任何其他的点击为100ms。 var clickObject = {
    flag: false,
    isAlreadyClicked: function () {
     var wasClicked = clickObject.flag;
     clickObject.flag = true;
     setTimeout(function () { clickObject.flag = false; }, 100);
     return wasClicked;
    }
    };

    $("#myButton").bind("click touchstart", function (event) {
    if (!clickObject.isAlreadyClicked()) {
     ...
    }
    }




    9.
    我写了一个jQuery插件,它提供了一个“touchclick”事件,你可以听。这需要避免被解雇两次都支持双方的点击和touchstart事件时,事件的照顾。


    10. 只为目的,这里就是我的最快/最敏感的点击桌面/ TAP解决方案,我能想到的做:
    我换成jQuery的on功能与修改一个,只要浏览器支持触摸事件,全部换成我的点击事件与touchstart。 $.fn.extend({ _on: (function(){ return $.fn.on; })() });
    $.fn.extend({
    on: (function(){
     var isTouchSupported = 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch;
     return function( types, selector, data, fn, one ) {
      if (typeof types == 'string' && isTouchSupported && !(types.match(/touch/gi))) types = types.replace(/click/gi, 'touchstart');
      return this._on( types, selector, data, fn);
     };
    }()),
    });


    用法比将有确切像以前一样: $('#my-button').on('click', function(){ /* ... */ });


    但touchstart时可用,点击时不会。需要的任何种类的任何延误:D

    11.
    我也工作在Android /
    iPad的Web应用程序,它看来,如果“会连续”,就足以“(无需touchstart)。。通过禁用touchstart,单击();从jQuery的。它的实际工作还没有被touchstart超载。
    最后,您可以BINB生活。(“touchstart”功能(E){e.stopPropagation();});要求touchstart事件停止传播,客厅点击()来获取触发。
    它的工作

    12.
    有很多事情试图解决这一问题时要考虑的。大多数解决方案要么打破滚动或不办理鬼单击事件正常。 对于一个完整的解决方案,请参阅
    注意:你不能处理好鬼click事件每个基础。延迟的点击是通过屏幕位置发射,所以如果你的触摸事件修改页面的方式,单击事件将被发送到该页面的新版本。


    13. 相反,你一个计数器: var count = 0;
    $thing.bind('touchstart click', function(){
    count++;
    if (count %2 == 0) { //count 2% gives the remaining counts when devided by 2
    // do something
    }

    return false
    });




    14. 它可以有效地分配给该事件'touchstart
    mousedown'或'touchend mouseup'以避免不希望的副作用click。


    15.
    考虑一个事实,即点击将始终遵循一个触摸事件的优势,这里是我做的,无需或全局标志摆脱“鬼点击”的。 $('#buttonId').on('touchstart click', function(event){
    if ($(this).data("already")) {
     $(this).data("already", false);
     return false;
    } else if (event.type == "touchstart") {
     $(this).data("already", true);
    }
    //your code here
    });


    基本上,每当ontouchstart上一个标志一组并随后删除(忽略)事件触发,当点击

    转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式