Есть ли библиотека жестов javascript, которая работает с вкладкой Samsung galaxy?

Я экспериментировал с библиотеками жестов javascript. Все они отлично работают с iPad mini, однако, когда я пытаюсь использовать их на Samsung Galaxy Tab (GT-P7510, Android 4.04), результаты в лучшем случае прерывисты.

Лучшие результаты я получаю в портретном режиме. В ландшафтном режиме практически ничего не работает.

Я пробовал, среди прочих, следующие библиотеки, все из которых я нашел из этого сообщения: http://www.queness.com/post/11755/11-multi-touch-and-touch-events-javascript-libraries

  • hammer.js
  • quo.js
  • обидчивый
  • DoubleTap
  • jgestures
  • touchswipe

Touchswipe работал лучше всего, но все остальные просто не играли в мяч.

На странице Hammer есть демонстрационная версия, которая отлично работает на ipad, но не на Android:

http://eightmedia.github.com/hammer.js/

Итак, кто-нибудь знает, каким образом я могу использовать жестовые салфетки для игры в моей галактике?

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

Ответ 1

Мне повезло с этим:

https://github.com/HotStudio/touchy

Он имеет длинные нажатия, щепотку, поворот и салфетки, а код довольно легко настроить.

Обратите внимание, что нужно использовать комбинацию жестов - например, салфетка почти всегда вызывает длинное касание, поэтому вам нужно установить флаги или иначе обработать это.

Ответ 2

Вот инструмент сравнения жестов CodePen. http://jsfiddle.net/icoxfog417/uQBvP/

Мы оставляем Hammer.JS после обширной работы и переместимся в Quo, которую мы находим в порядке. Теперь все изменилось и изменилось.

  document.head.insertAdjacentHTML( 'beforeEnd', '<meta name="viewport" content="target-densitydpi=device-dpi,width=device-width,initial-scale=1.0" />' );

$(function(){
  //initialization 
  $(".detector").bind("click touchstart",function(e){
    $(".detector").removeClass("selected");
    $(this).addClass("selected");

    unbindLibrary();
    bindLibrary($(this).prop("id"));
  });

  //bind library to gesture pad
  bindLibrary = function(id){
    var $pad = $("#gesture-pad");
    var events = [];
    var eventStr = "";
    $("#" + id + "List li").each(function(){
      events.push($(this).text());
    })
    //make target event list from each library gestureList
    eventStr = events.join(" ");

    switch(id){
      case "hammer":
        hammer = Hammer($pad.get(0), {
          prevent_default: true
        })
        .on(eventStr, logEvent);
        break;
      case "quojs":
        for(var i = 0;i<events.length;i++){
          $$("#gesture-pad").on(events[i], logEvent);
        }
        $$("#gesture-pad").on("touchstart",function(e){
          e.preventDefault();
        });
        break;
      case "touchSwipe":
        var options = {};
        var touchSwipeHandler = function(name){
          if(name.indexOf("pinch") < 0){
            return function(event, distance, duration, fingerCount){ 
                     var e = {}; e["type"] = name; logEvent(e);        
                   };
          }else{
            return function(e, direction, distance, d, f, pinchZoom){ 
                     var e = {}; e["type"] = name; logEvent(e);        
                   };
          }
        };

        for(var i = 0;i<events.length;i++){
            options[events[i]] = new touchSwipeHandler(events[i]); 
        }
        $pad.swipe(options);
        break;
      case "touchy" :
        var handler = function(name){
            return function(event, phase, $target, data){
                     var e = {}; e["type"] = name; logEvent(e);
                   }
        }
        for(var i = 0;i<events.length;i++){
            $pad.bind(events[i],new handler(events[i]));
        }
        break;      
    }
  }

  //unbind library from gesture pad
  unbindLibrary = function(){
    var element = $("#gesture-pad").clone();
    $("#gesture-pad").replaceWith(element);
    $(".gesturelist .selected").removeClass("selected");
  }

  //log detected gesture
  logEvent = function(e){
    $("#detected").text(e.type);
    var selected = $(".detector.selected").prop("id");
    $("#" + selected + "List li").each(function(){
        if($(this).text() == e.type){
            $(this).addClass("selected");
`enter code here`        };
    })          
    return false;
  }

  $(".detector").first().addClass("selected");
  bindLibrary($(".detector.selected").prop("id"));

})

Ответ 3

Я знаю, что это старый вопрос, но я попробовал несколько библиотек и не был доволен каким-либо из них, поэтому перевернул мой собственный. Он лицензирован MIT и доступен в

https://github.com/aerik/GestureListener.js

с тестовой/демонстрационной страницей на

http://aerik.github.io/GestureListener/example.htm

Я использую его регулярно на моем телефоне Galaxy S4, пару Ipads и нескольких устройствах с сенсорным экраном Windows 8. Мы используем его для производства программного обеспечения на работе.

Отчеты об ошибках (с примерами) приветствуются.