2012-04-23 17 views
7

Có cách nào để liên kết với sự kiện nhấn đúp (trong một dòng mã) cho safari di động không? Hoặc, giải pháp thay thế là triển khai nó chặn hai sự kiện một lần xảy ra trong một thời gian ngắn nhất định (ví dụ: http://appcropolis.com/blog/implementing-doubletap-on-iphones-and-ipads/)?Nhấn đúp vào safari di động

+0

Tab kép không được sử dụng để thu phóng? Có phải 2 sự kiện nhấn thậm chí được kích hoạt trong trình duyệt không? – Undefined

+0

sự kiện tương tự được sử dụng để thu phóng và tôi muốn ghi đè hành vi cho tình huống cụ thể – BreakPhreak

+0

Xin lỗi nếu tôi không liên quan đến vấn đề của bạn, nhưng nếu bạn hiển thị trang web, bạn có thể chỉ định cài đặt của chế độ xem trong thẻ meta. Bạn có thể thấy điều này trong iwebkit từ đoạn mã. –

Trả lời

6

Câu trả lời ngắn: bạn phải triển khai thông qua hai lần nhấp.

câu trả lời thực tế: Đây là một thực hiện jQuery-miễn nhấp đúp cho safari di động mà chỉ cần một dòng mã (để cho phép dblclick sự kiện):

Ngoài ra, bạn có thể cần phải disable mobile Safari's default zoom với thẻ meta này:

<meta name="viewport" content="width=device-width,user-scalable=no" /> 
0

Override dblclick sự kiện và sử dụng bind, live, on, delegate như đối với bất kỳ sự kiện khác:

jQuery.event.special.dblclick = { 
    setup: function(data, namespaces) { 
     var elem = this, 
      $elem = jQuery(elem); 
     $elem.bind('touchend.dblclick', jQuery.event.special.dblclick.handler); 
    }, 

    teardown: function(namespaces) { 
     var elem = this, 
      $elem = jQuery(elem); 
     $elem.unbind('touchend.dblclick'); 
    }, 

    handler: function(event) { 
     var elem = event.target, 
      $elem = jQuery(elem), 
      lastTouch = $elem.data('lastTouch') || 0, 
      now = new Date().getTime(); 

     var delta = now - lastTouch; 
     if(delta > 20 && delta<500){ 
      $elem.data('lastTouch', 0); 
      $elem.trigger('dblclick'); 
     }else 
      $elem.data('lastTouch', now); 
    } 
}; 
+0

hoạt động trên safari nhưng không hoạt động trong chrome dành cho máy tính để bàn – alpere

3

Nếu bạn muốn có tác nhấp đúp chuột vào cả trên trình duyệt và nền tảng iOS, bạn nên có đoạn mã sau:

jQuery.event.special.dblclick = { 
    setup: function(data, namespaces) { 
     var agent = navigator.userAgent.toLowerCase(); 
     if (agent.indexOf('iphone') >= 0 || agent.indexOf('ipad') >= 0 || agent.indexOf('ipod') >= 0) { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.bind('touchend.dblclick', jQuery.event.special.dblclick.handler); 
     } else { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.bind('click.dblclick', jQuery.event.special.dblclick.handler); 
     } 
    }, 
    teardown: function(namespaces) { 
     var agent = navigator.userAgent.toLowerCase(); 
     if (agent.indexOf('iphone') >= 0 || agent.indexOf('ipad') >= 0 || agent.indexOf('ipod') >= 0) { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.unbind('touchend.dblclick'); 
     } else { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.unbind('click.dblclick', jQuery.event.special.dblclick.handler); 
     } 
    }, 
    handler: function(event) { 
     var elem = event.target, 
      $elem = jQuery(elem), 
      lastTouch = $elem.data('lastTouch') || 0, 
      now = new Date().getTime(); 
     var delta = now - lastTouch; 
     if (delta > 20 && delta < 500) { 
      $elem.data('lastTouch', 0); 
      $elem.trigger('dblclick'); 
     } else { 
      $elem.data('lastTouch', now); 
     } 
    } 
}; 

Hãy thử nó ở đây:

http://jsfiddle.net/UXRF8/

+0

Mã tuyệt vời. Làm việc hoàn hảo. –

Các vấn đề liên quan