Как получить сенсорные события, работающие в Chrome Chrome, работающие на поверхности Windows?

Это то, что я использую для запуска сенсорных событий:

var eventMap = {};

(function(){
  var eventReplacement = {
    "mousedown": ["touchstart mousedown", "mousedown" , "pointerdown"],
    "mouseup": ["touchend mouseup", "mouseup", "pointerup"],
    "click": ["touchstart click", "click"],
    "mousemove": ["touchmove mousemove", "mousemove", "pointermove"]
 };

for (i in eventReplacement) {
    if (typeof window["on" + eventReplacement[i][0]] == "object") {
        eventMap[i] = eventReplacement[i][0];
    } 
    else {
        eventMap[i] = eventReplacement[i][1];
        };
  };
})();

Тогда я использую это следующим образом:

$(genderSlider.pointer).on(eventMap.mousedown, setOffset);
$(genderSlider.pointer).on(eventMap.mousemove, fnMoveSlider);
$(genderSlider.pointer).on(eventMap.mouseup, function(event){event.preventDefault(); $(event.target).css("-webkit-opacity", "0.5");usingSlider = false});

Тогда методы обратного вызова выглядят примерно так:

function setOffset(event){ 

alert(event.type);
event.preventDefault();
alert(event.type);
var touch = '';
if (event.type == 'mousedown'){
    usingSlider = true;
    touch = event;
} else {
    usingSlider = true;
    alert(event.type);
    touch = event.originalEvent.touches[0];
}

var ypos = touch.pageY; // Get Y Coordinate
$(event.target).css("-webkit-opacity", "1.0");
offset = parseFloat(ypos) - parseFloat(this.style.top); 

refObj = {};

if(this.id === $(genderSlider.pointer).attr("id")){
        refObj = genderSlider;
   }
}

Все работает нормально для событий мыши. Но для сенсорных событий предупреждение показывается как мышиный ход. Пытался touch-action: none также. Но не работает

Кто-нибудь может подсказать, что мне попробовать?

1 ответ

Решение

Я наконец заставил это работать. Может быть полезно для будущих читателей.

Решение было на самом деле намного проще, чем я его представлял. Хотя это не имеет особого смысла, но на самом деле это работает.

Решение было следующим:

Написал метод для двух типов событий отдельно, чтобы он выглядел так:

$(genderSlider.pointer).on("mousedown", setOffset);
$(genderSlider.pointer).on("mousemove", fnMoveSlider);
$(genderSlider.pointer).on("mouseup", function(event)    {event.preventDefault(); $(event.target).css("-webkit-opacity", "0.5");usingSlider = false});

И снова на ощупь:

$(genderSlider.pointer).on("touchstart", setOffsetForTouch);
$(genderSlider.pointer).on("touchmove", fnMoveSliderForTouch);
$(genderSlider.pointer).on("touchend", function(event)    {event.preventDefault(); $(event.target).css("-webkit-opacity", "0.5");usingSlider = false});

Затем записал события обратного вызова отдельно, чтобы обрабатывать случаи по-разному.

Другие вопросы по тегам