Ich habe ein Problem mit dem Swipe-Code auf meiner Webanwendung. Mit nur einem Finger funktioniert das Wischen zwischen den Seiten einwandfrei, wenn ich jedoch mit einem zweiten Finger berühre und ihn gleichzeitig mit dem ersten berühre, wird die App verwirrt, welcher Finger man hören soll. Dies führt im Allgemeinen dazu, dass Dinge sehr falsch laufen. Wie kann ich sicherstellen, dass die Touch-Ereignisse, die die App berücksichtigt, nur von der ersten Berührung mit dem Finger ausgelöst werden?Verhindern von zusätzlichen Problemen in Webapp
Der Code für meine Swipe-Plugin wie folgt aussieht:
(function($) {
$.fn.movement = function(options) {
var defaults = {
threshold: { x: 150, y: 15 },
mouseUp: function() {},
mouseMove: function() { },
mouseDown: function() { },
scrollStart: function() { },
scrollStop: function() { },
scrollMove: function() { }
};
var options = $.extend(defaults, options);
if (!this) return false;
//alert(this.attr("id"));
return this.each(function() {
var me = $(this)
// Private variables for each element
var originalCoord = { x: 0, y: 0 }
var lastCoord = {x: 0, y: 0 }
var finalCoord = { x: 0, y: 0 }
var velocity = { x: 0, y: 0 }
function touchMove(event) {
event.preventDefault();
finalCoord.x = event.targetTouches[0].pageX // Updated X,Y coordinates
finalCoord.y = event.targetTouches[0].pageY
defaults.scrollMove(finalCoord);
defaults.mouseMove(finalCoord,activeDirection());
}
function touchEnd(event) {
var direction = stoppedDirection();
defaults.scrollStop(finalCoord);
defaults.mouseUp(velocity,direction);
}
function touchStart(event) {
originalCoord.x = event.targetTouches[0].pageX
originalCoord.y = event.targetTouches[0].pageY
lastCoord.x = originalCoord.x
lastCoord.y = originalCoord.y
finalCoord.x = originalCoord.x
finalCoord.y = originalCoord.y
defaults.scrollStart(originalCoord);
}
function activeDirection() {
var direction = [];
var vx = lastCoord.x - finalCoord.x;
var vy = lastCoord.y - finalCoord.y;
if (vy < 0 && (Math.abs(vy) > defaults.threshold.y))
direction.push('down');
else if (vy > 0 && (Math.abs(vy) > defaults.threshold.y))
direction.push('up');
if (vx < 0 && (Math.abs(vx) > defaults.threshold.x))
direction.push('right');
else if (vx > 0 && (Math.abs(vx) > defaults.threshold.x))
direction.push('left');
return direction;
}
function stoppedDirection() {
var direction = [];
velocity.x = originalCoord.x - finalCoord.x;
velocity.y = originalCoord.y - finalCoord.y;
if (velocity.y < 0 && (Math.abs(velocity.y) > defaults.threshold.y))
direction.push('down');
else if (velocity.y > 0 && (Math.abs(velocity.y) > defaults.threshold.y))
direction.push('up');
if (velocity.x < 0 && (Math.abs(velocity.x) > defaults.threshold.x))
direction.push('right');
else if (velocity.x > 0 && (Math.abs(velocity.x) > defaults.threshold.x))
direction.push('left');
return direction;
}
this.addEventListener("touchstart", touchStart, false);
this.addEventListener("touchmove", touchMove, false);
this.addEventListener("touchend", touchEnd, false);
this.addEventListener("touchcancel", touchCancel, false);
});
};
})(jQuery);
Schätzen Sie die Antwort. Ich würde es vorziehen, dies innerhalb des vorhandenen Plugins zu beheben, aber es ist gut zu wissen, dass es Alternativen gibt, wenn keine praktikable Lösung für den aktuellen Code existiert. – Mulberry