Эта тема может быть уже решена, но ответ был нет никакого способа, чтобы обнаружить его. Ну, мне нужно было найти решение, это было очень важно. Таким образом, я нашел приемлемое решение этой проблемы:
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
}
}
}
}
и регистрации событий:
document.addEventListener("mousewheel", mouseHandle, false);
document.addEventListener("DOMMouseScroll", mouseHandle, false);
Это может понадобиться некоторые оптимизации и, может быть, менее совершенным, но это работает! По крайней мере, он может обнаружить трекпад macbook. Но из-за дизайна я бы сказал, что он должен работать где угодно, где пэд вводит много звонков.
Вот как это работает:
Когда первый пользователь прокручивает, он обнаружит и проверить, что в 50мс не более 5 событий был вызван, что довольно необычно для нормальной мыши, но не для сенсорной панели ,
Тогда есть часть else, которая не важна для обнаружения, а скорее трюк для вызова функции один раз, как когда пользователь выполняет поиск. Пожалуйста, приходите ко мне, если я не был достаточно ясен, было очень сложно получить эту работу и, конечно же, было менее идеальным решением.
Редактировать: Я оптимизировал код настолько, насколько могу. Он обнаруживает мышеловку во второй раз и мгновенно салфетки на трекпаде. Удалено также много повторяющегося и ненужного кода.
Редактировать 2 Я изменил номера для проверки времени и числа событий, вызванных от 50 до 100 и от 5 до 10 соответственно. Это должно привести к более точному обнаружению.
Вы имеете в виду сенсорное устройство или устройство мыши с сенсорным экраном? Первое различие тривиально, второе невозможно. – apsillers
@ переходники: сенсорное устройство мыши. – Fragsworth