2015-12-15 58 views
0

在我的手機上,當我點擊/觸摸某個元素時,會觸發範圍內的某個過程,並且必須更新它,但一切正常,但是如果我想立即重複該事件,則無法使用jqLit​​e/jQuery中的標準.on('click')活頁夾。爲什麼Angular事件在設備上被延遲?

當您觸摸容器時,兩者之間存在明確的延遲。

var myApp = angular.module('myApp', ['ngTouch']); 

myApp.controller('myCtrl', function MyCtrl($scope) { 
    $scope.name = 'Superhero'; 
    $scope.counter = 0; 
    $scope.fire = function() { 
     $scope.counter++; 
    }; 
}); 


myApp.directive('directiveA', function() { 
    return { 
     restrict: 'A', 
     link : function(scope, element) { 
     scope.counterB = 0; 
     $(element).on('click', function() { 
      scope.counterB++; 
      scope.$digest(); 
     }); 
    } 
    }; 
}); 

DEMO:http://jsfiddle.net/HB7LU/21162/

在演示中,如果觸摸在紅色條的一側,再在另一面,無論你如何快速觸摸它時,它更新。

但是在綠色欄上,如果觸摸左側和右側,觸摸時不會更新。

紅色條正在使用ng-click指令,綠色條在點擊活頁夾上使用標準,然後從該範圍鏈中運行摘要。

Angulars ngTouch模塊是什麼造成這種延遲。我想知道如何使用ngTouch覆蓋ngClick帶來的延遲?

+0

在我的電腦上,點擊綠色條時我看不到任何延遲。兩者工作完全相同。 – Vivek

+0

請參閱我的OP,我提到這與設備和角度觸摸模塊有關@VVK –

+0

ngTouch替換ngClick指令,並且在'click'事件中做* nothing *,這就是延遲出現的原因。 – estus

回答

1

如果您查看ng-click的文檔,可以看到tap/release與觸發click事件之間有300ms的延遲,但ng-click事件不使用默認點擊觸發處理程序所以不會有任何延遲,但是當您使用手動事件綁定時,延遲即將到來。

在觸摸屏設備上使用的默認ngClick設計爲 的更強大的替代品。在發送點擊事件之前,大多數移動瀏覽器在點擊並釋放後等待約300ms 。該版本 立即處理它們,然後阻止傳播以下點擊事件 。