Обнаружение сенсорного экрана [дубликат]

Используя ES2017, вы должны иметь это как объявление функции

async function foo() {
    var response = await $.ajax({url: '...'})
    return response;
}

и выполнить его следующим образом.

(async function() {
    try {
        var result = await foo()
        console.log(result)
    } catch (e) {}
})()

Или синтаксис Promise

foo().then(response => {
    console.log(response)

}).catch(error => {
    console.log(error)

})
1
задан nirmal 20 April 2015 в 11:50
поделиться

4 ответа

Я действительно хочу, чтобы вы Modernizr, но ...

var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;
var eventType = supportsTouch ? 'ontouchstart' : 'click';

Затем объявите своих слушателей событий как таковых:

$('#id').on(eventType, function(e) {
  alert('id was clicked');
});
2
ответ дан ediblecode 27 August 2018 в 17:47
поделиться

Это должно устранить задержку в 300 мс и запускать имитированные клики на рабочем столе и сенсорных устройствах:

$('#id').on('mousedown touchstart', function() {

    $(this).one('mouseup touchend', function() {
        alert('id was clicked');
   });
});

Если элемент имеет ссылку в нем (обычно это срабатывает click), для этого потребуется некоторое Адаптация:

$('#id a').on('mousedown touchstart', function() {

    var destination = this.attr('href');

    $(this).one('mouseup touchend', function() {
        if (destination) window.location = destination;
    });
});

Изменить - уже имея принятый ответ, этот ответ был скорее дополнительным примечанием. Но Нирмал был прав в комментариях, которые касаются устройств, имитирующих события мыши, могут привести к осложнениям. Таким образом, вышеупомянутый код лучше подходит для использования только с событиями касания.

Чтобы получить более полный ответ с этим ответом, я отправлю свой подход для одновременной обработки событий касания и мыши. Любая последовательность запускает пользовательское событие с именем page:tap. Прослушивание этих имитируемых кликов можно выполнить следующим образом:

$(subject).on('page:tap', function() { ... });

События мыши и касания разделяются, и любая эмуляция, запускающая дополнительные события, предотвращается путем добавления класса к body между touchend и click, удалив его снова, когда произойдет последнее.

var root = $('body'), subject = '#example_1, #example_2';

$(document).on('mousedown touchstart', subject, function(e) {

  if (e.type == 'mousedown' && e.which != 1) return; // only respond to left clicks
  var mean = $(e.currentTarget);

  mean.one('mouseup touchend', function(e) {
    if (e.type == 'touchend' && !root.hasClass('punch')) root.addClass('punch');
    else if (root.hasClass('punch')) return;
    mean.trigger('page:tap');
  });
})
.on('click', subject, function() {

  root.removeClass('punch');
  return false;
});

Можно также добавить класс к самому активному элементу или html, например, это немного зависит от настройки, как целое.

2
ответ дан Shikkediel 27 August 2018 в 17:47
поделиться

Применить fastclick к вашему приложению. Там вы найдете файл .js и документацию. Самый короткий (jQuery) способ реализации этого будет:

$(function() {
    FastClick.attach(document.body);
});

Если вы не используете jQuery, вы можете выбрать другой способ:

if ('addEventListener' in document) {
    document.addEventListener('DOMContentLoaded', function() {
        FastClick.attach(document.body);
    }, false);
}

Сообщите мне если вам нужна дополнительная помощь!

Это прямая ссылка к файлу fastclick.js

1
ответ дан Sithys 27 August 2018 в 17:47
поделиться

Вы можете попробовать:

var clickEvent = ((document.ontouchstart!==null)?'click':'touchstart');
$("#mylink").on(clickEvent, myClickHandler);
1
ответ дан Sky Yip 27 August 2018 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: