Когда подключена мышь, можно предположить, что с достаточно высокой скоростью передачи (я бы сказал, практически 100%), что пользователь перемещает мышь на минимальное расстояние после того, как страница готова - без какого-либо щелчка.Механизм ниже обнаруживает это.В случае обнаружения я рассматриваю это как признак отсутствия поддержки касания или, если поддерживается, незначительной важности при использовании мыши.Предполагается, что сенсорное устройство не обнаружено.
РЕДАКТИРОВАТЬ Этот подход может не подходить для всех целей.Он может использоваться для управления функциональностью, которая активируется на основе взаимодействия с пользователем на загруженной странице, например, в программе просмотра изображений.Приведенный ниже код также оставит событие mousemove привязанным к устройствам без мыши, как сейчас.Другие подходы могут быть лучше.
Грубо говоря, это выглядит так (извините за jQuery, но похоже на чистый Javascript):
var mousedown, first, second = false;
var ticks = 10;
$(document).on('mousemove', (function(e) {
if(UI.mousechecked) return;
if(!first) {
first = e.pageX;
return;
}
if(!second && ticks-- === 0) {
second = e.pageX;
$(document).off('mousemove'); // or bind it to somewhat else
}
if(first && second && first !== second && !mousedown){
// set whatever flags you want
UI.hasmouse = true;
UI.touch = false;
UI.mousechecked = true;
}
return;
}));
$(document).one('mousedown', (function(e) {
mousedown = true;
return;
}));
$(document).one('mouseup', (function(e) {
mousedown = false;
return;
}));