如何在移动设备上实现滑动手势呢?
如何在移动设备上实现滑动手势呢?
我有一个使用AngularJS制作的应用程序,具有用箭头键导航以切换视图的功能。
我想使用触摸设备的滑动来实现这种导航。我尝试了jGestures库,但是它与滑动不太兼容。
有人建议我不要使用jquery mobile。
还有其他实现滑动的方法吗?
编辑:
它不能清晰地检测到滑动。我在多个设备上进行了测试,包括iPad,需要多次滑动才能完成一个操作(在我的情况下是路由)。
admin 更改状态以发布 2023年5月21日
我为了满足自己的需要而创建了这个函数。
自由使用。在移动设备上运行效果良好。
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);
如果检测到滑动,将调用函数“myfunction”,并将元素ID和“l,r,u,d”(左,右,上,下)作为参数。
示例:http://jsfiddle.net/rvuayqeo/1/
我(UlysseBN)基于这个脚本创建了一个新版本,使用更现代的JavaScript,看起来在某些情况下表现更好。如果您认为它应该是这个答案的编辑,请告诉我,如果您是原始作者并最终编辑,我会删除我的答案。