【问题标题】:Is there a javascript gesture library that works with the Samsung galaxy tab?是否有适用于三星 Galaxy 选项卡的 JavaScript 手势库?
【发布时间】:2013-02-13 13:03:18
【问题描述】:

我一直在尝试使用 JavaScript 手势库。它们都适用于 iPad mini,但是,当我在三星 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
  • 敏感
  • 双击
  • 手势
  • 触摸滑动

Touchswipe 效果最好,但其他所有的都没有真正发挥作用。

Hammer 页面有一个演示,在 ipad 上运行良好,但在 android 上运行良好:

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

那么,有没有人知道我可以通过滑动手势在我的银河系上玩得开心吗?

我查看了以前的 stackoverflow 问题所指向的 quirksmode 页面,但据我所知,该页面已过时且不再维护。此外,它实际上并没有提及任何库。

【问题讨论】:

  • 您已经在使用 javascript 库了吗?现在我正在开发一个 jQuery UI 项目,为了添加手势功能,我使用了《jQuery UI Touch Punch》,它在 iPad 和 Android 上运行得非常好。 touchpunch.furf.com
  • 我被新的sencha框架惊呆了sencha.com/products/touch 我估计它的核心仍然是Ext JS...
  • 我认为这个问题很可能已经结束了:见Why are “shopping list” questions bad?
  • 对不起,我不同意。该元讨论中陈述的论点不适合这里。首先,我还没有收到答案!
  • 关于触控打孔,我不知道如何使用它来实现滑动手势。如果我有一个像拖放这样的现有动作,我想在平板电脑上使用它会很好,但我想在没有现有动作的情况下滑动。在图像上滑动以获取下一张图像。那种东西。

标签: javascript jquery swipe gestures


【解决方案1】:

我运气不错:

https://github.com/HotStudio/touchy

它具有长按、捏合、旋转和滑动手势,并且代码相当容易自定义。

请注意,需要处理手势组合 - 例如,滑动几乎总是会触发长触摸,因此您必须设置标志或以其他方式处理。

【讨论】:

  • 另外,如果您还没有尝试过,请查看那里的仓库中的开发分支——它有对我有帮助的更新
  • +1 以获得实际答案!今晚我会做实验,让你知道我是怎么做的。
  • 是的!最后!这确实有效。非常感谢您为我指明了正确的方向。如果我切换方向,它甚至可以工作。
【解决方案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's 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 手机、几台 Ipad 和几台 Windows 8 触摸屏设备上使用它。我们将它用于工作中的生产软件。

    欢迎提交错误报告(附示例)。

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 2019-02-10
      相关资源
      最近更新 更多