Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery确定Android取消/反向滑动(从左向右滑动)_Jquery_Android_Swipe_Calculus - Fatal编程技术网

使用jQuery确定Android取消/反向滑动(从左向右滑动)

使用jQuery确定Android取消/反向滑动(从左向右滑动),jquery,android,swipe,calculus,Jquery,Android,Swipe,Calculus,在Android上,不使用像Sencha、JQTouch或JQMobile这样的框架,而是使用jQuery(常规jQuery),我想检测取消/回扫(从左向右扫)。到目前为止,我已经完成了一些工作,但我正在尝试确定要在jQuery中实现的数学公式,以便捕获从左向右的滑动事件,而不是另一种手势。你有什么建议?我想我需要某种可以接受的差异。我假设有某种微积分公式可以在这里重新应用,但不幸的是,我在大学里避开了微积分。所以,希望你的回答能教育我 以下是一些示例x、y开始/结束数据: (a) 从左中到右上

在Android上,不使用像Sencha、JQTouch或JQMobile这样的框架,而是使用jQuery(常规jQuery),我想检测取消/回扫(从左向右扫)。到目前为止,我已经完成了一些工作,但我正在尝试确定要在jQuery中实现的数学公式,以便捕获从左向右的滑动事件,而不是另一种手势。你有什么建议?我想我需要某种可以接受的差异。我假设有某种微积分公式可以在这里重新应用,但不幸的是,我在大学里避开了微积分。所以,希望你的回答能教育我

以下是一些示例x、y开始/结束数据:

(a) 从左中到右上沿对角线滑动(在这种情况下是不受欢迎的姿势)

21269-278,85

(b) 从左中到右下沿对角线滑动(在这种情况下是一种不受欢迎的姿势)

13269-331436

(c) 从左中到右中直击(某种程度上)(一种理想的姿势)

34267-326266

36494-355479

var gnStartX = 0;
var gnStartY = 0;
var gnEndX = 0;
var gnEndY = 0;

window.addEventListener('touchstart',function(event) {
  gnStartX = event.touches[0].pageX;
  gnStartY = event.touches[0].pageY;
},false);

window.addEventListener('touchmove',function(event) {
  gnEndX = event.touches[0].pageX;
  gnEndY = event.touches[0].pageY;
},false);

window.addEventListener('touchend',function(event) {
  alert('START (' + gnStartX + ', ' + gnStartY + ')   END (' + gnEndX + ', ' + gnEndY + ')');
},false);

通过反复试验,我发现这是多么简单,不需要演算。以毫秒为单位的时间必须相当快,因此小于等于350毫秒。Y方差应为+40或-40。距离应为240像素

但是请注意,我在代码中使用了与设备无关的像素元标记:

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

以及我处理后退/取消刷卡事件的方式:

var gnStartX = 0;
var gnStartY = 0;
var gnStartTime = 0;
var gnEndX = 0;
var gnEndY = 0;
var gnEndTime = 0;

window.addEventListener('touchstart',function(event) {
  gnStartX = event.touches[0].pageX;
  gnStartY = event.touches[0].pageY;
  gnStartTime = Number(new Date());
},false);

window.addEventListener('touchmove',function(event) {
  gnEndX = event.touches[0].pageX;
  gnEndY = event.touches[0].pageY;
  gnEndTime = Number(new Date());
},false);

window.addEventListener('touchend',function(event) {
  var nDiffTime = gnEndTime - gnStartTime;
  var nDiffX = gnEndX - gnStartX;
  var nDiffY = gnEndY - gnStartY;
  // is this a swipe back/cancel event?
  if ((nDiffTime <= 350) && (nDiffX >= 240) && (nDiffY >= -40) && (nDiffY <= 40)) {
    event.preventDefault();
    goBack();
  }
},false);
var gnStartX=0;
var-gnStartY=0;
var gnStartTime=0;
var-gnEndX=0;
var-gnEndY=0;
var-gnEndTime=0;
window.addEventListener('touchstart',函数(事件){
gnStartX=event.touchs[0].pageX;
gnStartY=event.touchs[0].pageY;
gnStartTime=编号(新日期());
},假);
window.addEventListener('touchmove',函数(事件){
gnEndX=event.touchs[0].pageX;
gnEndY=event.touchs[0].pageY;
gnEndTime=编号(新日期());
},假);
window.addEventListener('touchend',函数(事件){
var nDiffTime=gnEndTime-gnStartTime;
var nDiffX=gnEndX-gnStartX;
var nDiffY=gnEndY-gnStartY;
//这是回刷/取消事件吗?

如果((nDiffTime=240)&&(nDiffY>=-40)&&(nDiffY一个很好的刷卡意图指标可能是刷卡线的斜率:

var nDiffX = gnEndX - gnStartX;
var nDiffY = gnEndY - gnStartY;
var nSlope = nDiffY / Math.max(0.001,nDiffX);

if ((nDiffTime <= 350) && (Math.abs(nDiffX) >= 240)) {
  event.preventDefault();
  if ((nSlope > -0.125)&&(nSlope < 0.125)) {
    // Between lines of 1/8 and -1/8 slope - close enough to straight horizontal
    if (nDiffX > 0) {
      // Swiped to the right
    } else {
      // Swiped to the left
    }
  }
  goBack();
}
var nDiffX=gnEndX-gnStartX;
var nDiffY=gnEndY-gnStartY;
变量nSlope=nDiffY/Math.max(0.001,nDiffX);
如果((nDiffTime=240)){
event.preventDefault();
如果((nSlope>-0.125)和&(nSlope<0.125)){
//在1/8和-1/8坡度的直线之间-足够接近水平直线
如果(nDiffX>0){
//向右转
}否则{
//向左转
}
}
goBack();
}
类似地,您可以检查坡度是否接近1(用于向上向右或向下向左滑动),1(用于向上向左或向下向右滑动)