Ich habe ein Element, das Funktionen auf ng-mousedown
und ng-mouseup
feuert. Es funktioniert jedoch nicht auf dem Touchscreen, gibt es Anweisungen wie ng-touchstart
und ng-touchend
?ng-touchstart und ng-touchend in Angularjs
Antwort
Es ist ein Modul für diese: https://docs.angularjs.org/api/ngTouch
Aber Sie können Ihre eigenen Richtlinien für Veranstaltungen schreiben:
<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.js"></script>
</head>
<body ng-app="plunker">
<div ng-controller="MainCtrl">
<div my-touchstart="touchStart()" my-touchend="touchEnd()">
<span data-ng-hide="touched">Touch Me ;)</span>
<span data-ng-show="touched">M-m-m</span>
</div>
</div>
<script>
var app = angular.module('plunker', []);
app.controller('MainCtrl', ['$scope', function($scope) {
$scope.touched = false;
$scope.touchStart = function() {
$scope.touched = true;
}
$scope.touchEnd = function() {
$scope.touched = false;
}
}]).directive('myTouchstart', [function() {
return function(scope, element, attr) {
element.on('touchstart', function(event) {
scope.$apply(function() {
scope.$eval(attr.myTouchstart);
});
});
};
}]).directive('myTouchend', [function() {
return function(scope, element, attr) {
element.on('touchend', function(event) {
scope.$apply(function() {
scope.$eval(attr.myTouchend);
});
});
};
}]);
</script>
</body>
</html>
Ich habe gemacht jene ealier heute, da ich es gebraucht selbst:
- ngTouch (eine Sammlung von unten)
- ngTouchmove
- ngTouchstart
- ngTouchend
Hoffe, es hilft.
Ich möchte ngTouchstart verwenden, aber leider verwendet es eval(), die in einer Chrome-App brechen wird. –
Es wurde nur aktualisiert, um stattdessen '$ scope. $ Apply' zu verwenden. –
danke! Kann sie entscheiden, ob sie sich von der Richtlinie nach links oder rechts bewegt? – Martian2049
Die Version, die wir entwickelt haben, verwendet $ parse(), was $ eval() intern verwendet. Wir wollten insbesondere Mousedown- und Touchstart-Events mit einer einzigen Direktive behandeln, aber in der eckigen Weise, so dass wir eckige Style-Ausdrücke einbeziehen können.
Wie so:
angular.module("ngStudentselect", []).directive('ngStudentselect', ['$parse', '$timeout', '$rootElement',
function($parse, $timeout, $rootElement) {
return function(scope, element, attr) {
var clickHandler = $parse(attr.ngStudentselect);
element.on('mousedown touchstart', function(event) {
scope.$apply(function() {
clickHandler(scope, {$event: event});
});
});
};
}]);
Dies ist eine abgespeckte Version von ngClick Richtlinie des Winkels.
Ich habe dieses Modul gestern installiert und ich schrieb diesen Post danach. Ich werde mit diesen Anweisungen versuchen. – ciembor
Angulars ngTouch-Bibliothek unterstützt keine Bindung an einzelne Touch- und Release-Ereignisse: http://stackoverflow.com/questions/19985097/can-angulars-ngtouch-library-be-used-to-detect-a-long-click-touch -hold-release – Egg