2

我正在开发一个 PhoneGap 项目,我们希望用户能够从列表中滑出项目。

JQueryMobile 有 .swipeleft() 和 .swiperight() 的事件,但这些是布尔事件;他们要么开火,要么不开火。

我们想要“花哨”,当用户滑动时,我们将项目变得越来越红。一旦它达到某个断裂点,它就会滑过剩下的路并逐渐消失。然后我们将使用 .slideUp() 关闭其容器 div,消除空白空间。或者,用户可以放手,项目将滑回原位,当它回到原位时变成白色。

从概念上讲,我知道如何制作动画,但是是否有某种形式的 .swipeStart() / .swipeMove() / .swipeEnd() 功能我可以挂钩到报告用户滑动了多远?如果是这样,我可以匹配项目的偏移量和颜色以反映用户从原点滑动了多远。

任何线索将不胜感激!

4

1 回答 1

5

例子

工作示例:http: //jsfiddle.net/Gajotres/K69AJ/

代码

Javascript代码:

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

$(document).on('vmousedown', function(event){
    gnStartX = event.pageX;
    gnStartY = event.pageY;
    event.preventDefault();
});

$(document).on('vmouseup', function(event){
    gnEndX = event.pageX;
    gnEndY = event.pageY;  
    var distance = Math.ceil(nthroot(Math.pow((gnEndX - gnStartX),2) + Math.pow((gnEndY - gnStartY),2), 2));

    if(Math.abs(gnEndX - gnStartX) > Math.abs(gnEndY - gnStartY)) {
        if(gnEndX > gnStartX) {
            alert("Swipe Right - Distance " + distance + 'px');
        } else {
            alert("Swipe Left - Distance " + distance + 'px');     
        }
    } else {
        if(gnEndY > gnStartY) {
            alert("Swipe Bottom - Distance " + distance + 'px');  
        } else {
            alert("Swipe Top - Distance " + distance + 'px');      
        }        
    }  
    
    event.preventDefault();      
});

function nthroot(x, n) {
  try {
    var negate = n % 2 == 1 && x < 0;
    if(negate)
      x = -x;
    var possible = Math.pow(x, 1 / n);
    n = Math.pow(possible, n);
    if(Math.abs(x - n) < 1 && (x > 0 == n > 0))
      return negate ? -possible : possible;
  } catch(e){}
}

这是我的例子,它会给你方向和距离。使用的事件是vmousedownvmouseup。它们是 jQuery Mobile 事件,用于连接桌面和移动浏览器之间的触摸事件,基本上它可以在任何平台上运行。如果您只想要移动平台,请更改vmousedown->touchstartvmouseup-> touchend

于 2013-05-23T18:13:04.130 回答