0

モバイルで「長押し」を実装するために、時間を設定し、別touchstartの時間をtouchend設定し、差を計算して要素が押された時間を確認する単純なイベント マップから始めました。これは私の古いコードでした:

        $('html')
            .on({
                touchstart : function(e){
                    g.tt.start = new Date();
                },
                touchend : function(e){
                    g.tt.end = new Date();
                    g.tt.delta = g.tt.end - g.tt.start;
                    alert(g.tt.delta);
                    g.tt = {};
                }
            })
        ;

しかし残念ながら...

...他のすべてのプレスは、前のタッチエンドからタッチスタートまでの差を計算し続けました。欠けている基本的なものがあると確信しているため、これを過剰に設計することになります(正式なトレーニングはありません)。ここに私の新しいコードがあります:

        $('html')
            .on({
                touchstart : function(e){
                    g.tt = {};
                    g.tt.start = new Date();
                },
                touchend : function(e){
                    g.tt.end = new Date();
                    g.tt.delta = g.tt.end - g.tt.start;
                    if( isNaN(g.tt.delta) == false ) {
                        alert(g.tt.delta);
                    } 
                    else {
                        return false;
                    }
                    setTimeout(function(){g.tt = {}; });
                }
            })
        ;

より少ない句でこれを行うためのはるかに簡単な方法があるはずではありませんか? g.tt私の変な変数名は気にしないでください。

4

2 に答える 2

1

私は間違ったアプローチを取り、素晴らしいプラグインも見つけたことに気づきました:

http://aanandprasad.com/articles/jquery-tappable/

于 2012-09-25T23:50:36.403 に答える
0

2 つのイベントの差を計っているので、setTimeout を使用する必要はありません。クロージャーを使用して、2 つのイベント間でいくつかの変数を共有するだけです。この例は、この回答から取られています:

(function () {
  var start, end;
  $('html').on({
    touchstart : function(e){
      start = +new Date(); // get unix-timestamp in milliseconds
    },
    touchend : function(e){
      end = +new Date();
      g.tt.delta = end - start;
      if( isNaN(g.tt.delta) == false ) {
        alert(g.tt.delta);
      }
    }
  });
})();

これは、マウスイベントとタッチイベントでこれを示すデモです

于 2012-09-25T22:43:31.417 に答える