In diesem Thema wird bereits gelöst werden, aber die Antwort gab es keine Möglichkeit, es zu erkennen ist. Nun, ich musste eine Lösung finden, das war sehr wichtig. So fand ich eine akzeptable Lösung für dieses Problem:
var scrolling = false;
var oldTime = 0;
var newTime = 0;
var isTouchPad;
var eventCount = 0;
var eventCountStart;
var mouseHandle = function (evt) {
var isTouchPadDefined = isTouchPad || typeof isTouchPad !== "undefined";
console.log(isTouchPadDefined);
if (!isTouchPadDefined) {
if (eventCount === 0) {
eventCountStart = new Date().getTime();
}
eventCount++;
if (new Date().getTime() - eventCountStart > 100) {
if (eventCount > 10) {
isTouchPad = true;
} else {
isTouchPad = false;
}
isTouchPadDefined = true;
}
}
if (isTouchPadDefined) {
// here you can do what you want
// i just wanted the direction, for swiping, so i have to prevent
// the multiple event calls to trigger multiple unwanted actions (trackpad)
if (!evt) evt = event;
var direction = (evt.detail<0 || evt.wheelDelta>0) ? 1 : -1;
if (isTouchPad) {
newTime = new Date().getTime();
if (!scrolling && newTime-oldTime > 550) {
scrolling = true;
if (direction < 0) {
// swipe down
} else {
// swipe up
}
setTimeout(function() {oldTime = new Date().getTime();scrolling = false}, 500);
}
} else {
if (direction < 0) {
// swipe down
} else {
// swipe up
}
}
}
}
und Registrierung der Ereignisse:
document.addEventListener("mousewheel", mouseHandle, false);
document.addEventListener("DOMMouseScroll", mouseHandle, false);
Es kann einige Optimierung benötigen und ist vielleicht nicht perfekt, aber es funktioniert! Zumindest kann es ein Macbook Trackpad erkennen. Aber aufgrund des Designs würde ich sagen, dass es überall funktionieren sollte, wo das Pad viele Ereignisanrufe einführt.
Hier ist, wie es funktioniert:
Wenn der Benutzer zuerst blättert, wird es erkennen und dass in 50ms überprüft nicht mehr als 5 Ereignisse ausgelöst wurden, die für eine normale Maus ziemlich ungewöhnlich ist, aber nicht für einen Trackpad .
Dann gibt es den else-Teil, der nicht für die Erkennung von Bedeutung ist, sondern eher ein Trick, eine Funktion einmal aufzurufen, wenn ein Benutzer wischt. Bitte komm zu mir, wenn ich nicht klar genug war, es war sehr schwierig, dies zum Laufen zu bringen, und ist natürlich eine weniger als ideale Umgehungslösung.
Edit: Ich optimierte den Code jetzt so viel wie ich kann. Es erkennt den Mauser zum zweiten Mal und streicht sofort über das Trackpad. Entfernt auch viel wiederholenden und unnötigen Code.
Edit 2 Ich änderte die Nummern für die Zeitprüfung und die Anzahl der Ereignisse von 50 bis 100 und 5 bis 10 aufgerufen. Dies sollte zu einer genaueren Erkennung führen.
Meinst du ein Touchscreen-Gerät oder ein Touchpad-Mausgerät? Die erste Unterscheidung ist trivial, die zweite ist unmöglich. – apsillers
@apsillers: Touchpad-Mausgerät. – Fragsworth