javascript - 如何为移动设备实现滑动手势?

标签 javascript mobile touch swipe gestures

我有一个用 AngularJS 制作的应用程序,它具有用于切换 View 的箭头键导航。

我想在触摸设备上使用滑动来实现这个导航。我试过 jGestures图书馆,但它不适合轻扫。 我被建议不要使用 jquery mobile .

请问还有其他实现swipe的方法吗?

编辑: 它没有检测到干净的滑动。我在包括 iPad 在内的多种设备上对其进行了测试,需要多次滑动才能执行一个操作(在我的例子中是路由)。

最佳答案

我根据需要制作了这个功能。

请随意使用。在移动设备上运行良好。

function detectswipe(el,func) {
  swipe_det = new Object();
  swipe_det.sX = 0; swipe_det.sY = 0; swipe_det.eX = 0; swipe_det.eY = 0;
  var min_x = 30;  //min x swipe for horizontal swipe
  var max_x = 30;  //max x difference for vertical swipe
  var min_y = 50;  //min y swipe for vertical swipe
  var max_y = 60;  //max y difference for horizontal swipe
  var direc = "";
  ele = document.getElementById(el);
  ele.addEventListener('touchstart',function(e){
    var t = e.touches[0];
    swipe_det.sX = t.screenX; 
    swipe_det.sY = t.screenY;
  },false);
  ele.addEventListener('touchmove',function(e){
    e.preventDefault();
    var t = e.touches[0];
    swipe_det.eX = t.screenX; 
    swipe_det.eY = t.screenY;    
  },false);
  ele.addEventListener('touchend',function(e){
    //horizontal detection
    if ((((swipe_det.eX - min_x > swipe_det.sX) || (swipe_det.eX + min_x < swipe_det.sX)) && ((swipe_det.eY < swipe_det.sY + max_y) && (swipe_det.sY > swipe_det.eY - max_y) && (swipe_det.eX > 0)))) {
      if(swipe_det.eX > swipe_det.sX) direc = "r";
      else direc = "l";
    }
    //vertical detection
    else if ((((swipe_det.eY - min_y > swipe_det.sY) || (swipe_det.eY + min_y < swipe_det.sY)) && ((swipe_det.eX < swipe_det.sX + max_x) && (swipe_det.sX > swipe_det.eX - max_x) && (swipe_det.eY > 0)))) {
      if(swipe_det.eY > swipe_det.sY) direc = "d";
      else direc = "u";
    }

    if (direc != "") {
      if(typeof func == 'function') func(el,direc);
    }
    direc = "";
    swipe_det.sX = 0; swipe_det.sY = 0; swipe_det.eX = 0; swipe_det.eY = 0;
  },false);  
}

function myfunction(el,d) {
  alert("you swiped on element with id '"+el+"' to "+d+" direction");
}

要使用这个函数就像使用它一样

detectswipe('an_element_id',myfunction);

detectswipe('an_other_element_id',my_other_function);

如果检测到滑动,则使用参数元素 ID 和“l、r、u、d”(左、右、上、下)调用函数“myfunction”。

示例:http://jsfiddle.net/rvuayqeo/1/


我 (UlysseBN) 制作了 a new version of this script基于这个使用更现代的 JavaScript 的,它看起来在某些情况下表现得更好。如果您认为应该编辑此答案,请告诉我,如果您是原作者并且最终进行了编辑,我将删除我的答案。

关于javascript - 如何为移动设备实现滑动手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084675/

相关文章:

authentication - 识别移动应用程序

iphone - 获取触摸坐标(0-480和0-320的形式)

javascript - 如何实现用户可自定义的键盘快捷键(在 javascript 中/在网络上)

javascript - jQuery 中的 this 和 $(this) 有什么区别?

javascript - Semantic-UI 避免对某些点击事件触发表单验证

javascript - 为什么 require.js 似乎在初始页面加载时加载了我的所有模块?

javascript - offset() 在移动浏览器中返回不同的值

html - 当输入集中在移动 safari 上时,页面底部出现不需要的填充

iphone - 防止触摸传播到下面的注释

iphone - 过滤单击和双击