AngularJS: ngTouch 300ms 지연
이 플렁커에는 두 개의 링크가 있습니다.왼쪽에 있는 것은 각도 터치 모듈이 삽입된 상태에서 ng 클릭 지시를 사용하고 있습니다.ng-click을 위한 각도 터치 모듈 설명에서 말한 것처럼, ng-click 링크는 300ms 지연되지 않아야 합니다.하지만 모바일 기기에서 테스트를 해봐도 여전히 그렇습니다.
그렇다면 plunkr은 iFrame 등에서 실행되기 때문에 올바른 기능을 방해하고 있습니까? 아니면 지시문이 올바르게 작동하려면 Fastclick.js를 프로젝트에 삽입해야 합니까?이해가 안 가요, 제발 도와주세요.
예: http://plnkr.co/NRRrmMFaIKg2zLu5C1Tg
edit: angularjs 문서의 예제도 작동하지 않습니다.그들은 심지어 앵글 터치 모듈을 삽입하지도 않았습니다.
angular sngTouch module은 ng-click 디렉티브에서 300ms 지연만 제거하고 있기 때문에 angular와 완벽하게 조화를 이루는 fastclick.js를 사용하고 있습니다.
처음에는 스크립트가 로드되기 전에 DOM이 준비되기 전에 Fastclick 라이브러리를 첨부했기 때문에 저에게는 효과가 없었습니다.나는 내 각진 앱의 실행 블록에 그 기능을 랩핑하여 이것을 고쳤습니다.DOM이 준비된 후 코드를 실행하는 기능입니다.
angular.module('myModule', []).
run(function() {
FastClick.attach(document.body);
});
이 방법은 angularjs youtube 채널의 최신 스크린캐스트에서 제안합니다.
저는 이 두 가지 모두를 들어주는 저만의 지시문을 작성함으로써touchstart
그리고.mousedown
이벤트(또는 이벤트)touchend
/mouseup
, 등).중복 제거를 위해 터치 이벤트가 발생할 때 플래그를 설정하고 플래그가 설정되면 모든 마우스 이벤트를 무시했습니다(터치 이벤트는 마우스 이벤트 전에 발생하므로 중복 제거하지 않으면 모바일 장치에서 이중 화재가 발생합니다).
appControllers.controller('AppCtrl', ['$scope',
function($scope) {
$scope._usingTouch = false;
/* app code */
}]).directive('lkClick', [function() {
return function(scope, element, attr) {
var fn = function() {
scope.$apply(function() {
scope.$eval(attr.lkClick);
});
}
element.on('touchstart', function(event) {
scope._usingTouch = true;
lk();
});
element.on('mousedown', function(event) {
if(!scope._usingTouch)
lk();
});
};
}]);
그러면 추가할 수 있습니다.lk-click="javascript()"
당신의 앱의 html에 지시.
Fastclick을 사용하는 것이 더 쉽고 빠르지만 사용자 지정이 가능하고 Fastclick 코드를 로드할 필요가 없습니다.
// Evita doble tap en dispositivos mobiles
var TIME_BETWEEN_CLICK = 0;
App.directive('ngSubmit', function () {
return {
restrict: 'A',
replace: false,
link: function (scope, el, attrs) {
el.bind('submit', function (e) {
if ((new Date().getTime() - TIME_BETWEEN_CLICK) > 300) {
TIME_BETWEEN_CLICK = new Date().getTime();
} else {
e.stopImmediatePropagation();
}
});
}
};
});
App.directive('ngClick', function () {
return {
restrict: 'A',
replace: false,
link: function (scope, el) {
el.bind('click', function (e) {
if ((new Date().getTime() - TIME_BETWEEN_CLICK) > 300) {
TIME_BETWEEN_CLICK = new Date().getTime();
} else {
e.stopImmediatePropagation();
}
});
}
};
});
언급URL : https://stackoverflow.com/questions/20718020/angularjs-ngtouch-300ms-delay
'programing' 카테고리의 다른 글
타임리프에서 변수 이름에 대한 값 설정 (0) | 2023.10.12 |
---|---|
C에 ()의 크기에 해당하는 비트가 있습니까? (0) | 2023.10.12 |
ID와 클래스의 차이점은 무엇입니까? (0) | 2023.10.12 |
각도 2: 관찰 가능을 약속으로 변환 (0) | 2023.10.12 |
WordPress 내부의 작성자 보관 페이지에서 작성자 이름 가져오기 (0) | 2023.10.12 |