タッチデバイスでの左/右スワイプを検出しますが、上/下スクロールを許可します

ラファエル・ジェガー:

左/右のスワイプを検出して反応する必要がありますが、ユーザーがXピクセルの最大の上下移動で指を左/右のみに移動する限り、同じ要素をスクロールできるようにしたいと思います、それはスクロールするべきではありませんが、彼がXを超えると、スクロールするはずです。

だから私がしたことは:

var startX, startY, $this = $(this);
function touchmove(event) {
        var touches = event.originalEvent.touches;
        if (touches && touches.length) {
            var deltaX = touches[0].pageX - startX;
            var deltaY = touches[0].pageY - startY;
            if (Math.abs(deltaY) > 50) {
                $this.html('X: ' + deltaX + '<br> Y: ' + deltaY + '<br>TRUE');
                $this.unbind('touchmove', touchmove);
                return true;
            } else {
                $this.html('X: ' + deltaX + '<br> Y: ' + deltaY);
                event.preventDefault();
            }
        }
    }

    function touchstart(event) {
        var touches = event.originalEvent.touches;
        if (touches && touches.length) {
            startX = touches[0].pageX;
            startY = touches[0].pageY;
            $this.bind('touchmove', touchmove);
        }
        //event.preventDefault();
    }

しかし、「if」の場合にスクロールする機能は復元しません...

ヒントをありがとう。

ココナッツ:

独自のタッチハンドラーイベントを作成しました。

それはチェックします:

高速クリック: 'fc'

左にスワイプ:「swl」

右にスワイプ:「swr」

上にスワイプ: 'swu'

下にスワイプ:「swd」

各チェックは対応するイベントを初期化します。ただし、スクロールして他の通常の操作を行うことができます。新しいイベントがいくつかあります。

swl swrが必要です。クリックイベントにはfc(fastclick)を使用することをお勧めします。通常のクリックよりもはるかに高速です。

window.onload = function() {
    (function(d) {
        var
            ce = function(e, n) {
                var a = document.createEvent("CustomEvent");
                a.initCustomEvent(n, true, true, e.target);
                e.target.dispatchEvent(a);
                a = null;
                return false
            },
            nm = true,
            sp = {
                x: 0,
                y: 0
            },
            ep = {
                x: 0,
                y: 0
            },
            touch = {
                touchstart: function(e) {
                    sp = {
                        x: e.touches[0].pageX,
                        y: e.touches[0].pageY
                    }
                },
                touchmove: function(e) {
                    nm = false;
                    ep = {
                        x: e.touches[0].pageX,
                        y: e.touches[0].pageY
                    }
                },
                touchend: function(e) {
                    if (nm) {
                        ce(e, 'fc')
                    } else {
                        var x = ep.x - sp.x,
                            xr = Math.abs(x),
                            y = ep.y - sp.y,
                            yr = Math.abs(y);
                        if (Math.max(xr, yr) > 20) {
                            ce(e, (xr > yr ? (x < 0 ? 'swl' : 'swr') : (y < 0 ? 'swu' : 'swd')))
                        }
                    };
                    nm = true
                },
                touchcancel: function(e) {
                    nm = false
                }
            };
        for (var a in touch) {
            d.addEventListener(a, touch[a], false);
        }
    })(document);
    //EXAMPLE OF USE
    var h = function(e) {
        console.log(e.type, e)
    };
    document.body.addEventListener('fc', h, false); // 0-50ms vs 500ms with normal click
    document.body.addEventListener('swl', h, false);
    document.body.addEventListener('swr', h, false);
    document.body.addEventListener('swu', h, false);
    document.body.addEventListener('swd', h, false);
}

この場合、hはすべてのタイプのイベントのハンドラーであり、ハンドラーを本文に追加します。

私があなたの質問を理解しているので、あなたはただ書く必要があります

YOURELEMENT.addEventListener('swr',YOURSWIPERIGHTFUNCTION,false);
YOURELEMENT.addEventListener('swl',YOURSWIPELEFTFUNCTION,false);

複数の要素と同じ関数を処理するには... 1つのハンドラーを追加するだけです。

だからあなたが持っているなら

<ul id="ul"><li>1</li><li>2</li><li>3</li></ul>

あなたがやる:

var deleteli=function(e){
    var li=e.target;
    console.log('deleting '+li.textContent);
}
document.getElementById('ul').addEventListener('swl',deleteli,false);

fcとswrも同じ

iosにはバグがあります。alert()を使用しないでください。2回実行されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

WordPressとWinSCPのアクセス許可:ファイルのアップロードを取得しています...は成功しましたが、アクセス許可やタイムスタンプの設定中にエラーが発生しました

分類Dev

ボディのスクロールを防ぎますが、オーバーレイのスクロールは許可します

分類Dev

UIPanGestureRecognizer:スワイプの終わりにタッチ位置を検出します

分類Dev

ElasticSearchは404を返しますが、マルチインデックス、マルチタイプの検索

分類Dev

NATは、デフォルトでoutisdeから内部ネットワーク(またはルーターのローカルインターフェイス)にアクセスすることを許可しますか?

分類Dev

アンドロイドはプロトタイプjsでタッチスタートを検出します

分類Dev

このブランチはデプロイが許可されていないため、npmプロバイダーでのデプロイをスキップします

分類Dev

PowerShellでWinSCP.NETアセンブリを使用すると、「ファイル '...'のアップロードは成功しましたが、アクセス許可やタイムスタンプの設定中にエラーが発生しました」

分類Dev

スプライトキットはワンタッチのみを許可します

分類Dev

Travis条件付きデプロイメント:エラー「ブランチは許可されていません」でスキップされたブランチの正規表現を使用してスクリプトをデプロイします

分類Dev

現在のWiFiネットワークにChromecastデバイスがあるかどうかをプログラムで検出できますか?

分類Dev

バッチスクリプトを使用して、名前が<>で始まるディレクトリ内の最新のファイルを検索します

分類Dev

キーをデプロイするためのGithubSSHアクセス許可が拒否されました

分類Dev

タプルの最初のインデックスで、値が異なるタプルのリストのインデックスを検索します

分類Dev

ログファイルのアクセス許可エラーを再実行しますが、アクセス許可はすでに777です

分類Dev

スクロールバーをカスタマイズし、テキストボックスをスクロールします-ワードプレス

分類Dev

Windowsは、どのネットワークアダプタがワイヤレスデバイスであるかをどのように認識しますか?

分類Dev

IAMロールを使用してEC2インスタンスからのみアクセスできるようにするには、S3バケットにどのアクセス許可を割り当てる必要がありますか?

分類Dev

ユーザーのデバイスに特定のプロファイルがインストールされているかどうかを検出します

分類Dev

rsyncバックアップはファイルのアクセス許可を台無しにします

分類Dev

UITableViewを上下にドラッグして、スワイプジェスチャを許可しませんか?

分類Dev

タッチデバイスでjQueryスクロールバープラグインを無効にしますか?

分類Dev

既知のUSBデバイスを許可するUdevルールは私のハブを検出しません

分類Dev

「入力」イベントでバックスペースとデルを検出しますか?

分類Dev

symfonyバンドルはカスタムプロバイダーを許可します

分類Dev

タイプ「文字列」のインデックス署名は読み取りのみを許可します

分類Dev

OSXバックアップディスクからファイルをコピーするときに許可が拒否されました

分類Dev

私はウェブマスター(フリーランス)へのフルアクセスを許可しました。彼が残した可能性のある悪意のあるスクリプト/ウイルスをチェックするにはどうすればよいですか?

分類Dev

バッチファイルは、ネットワークパスが見つかりませんでしたというエラーをスローします

Related 関連記事

  1. 1

    WordPressとWinSCPのアクセス許可:ファイルのアップロードを取得しています...は成功しましたが、アクセス許可やタイムスタンプの設定中にエラーが発生しました

  2. 2

    ボディのスクロールを防ぎますが、オーバーレイのスクロールは許可します

  3. 3

    UIPanGestureRecognizer:スワイプの終わりにタッチ位置を検出します

  4. 4

    ElasticSearchは404を返しますが、マルチインデックス、マルチタイプの検索

  5. 5

    NATは、デフォルトでoutisdeから内部ネットワーク(またはルーターのローカルインターフェイス)にアクセスすることを許可しますか?

  6. 6

    アンドロイドはプロトタイプjsでタッチスタートを検出します

  7. 7

    このブランチはデプロイが許可されていないため、npmプロバイダーでのデプロイをスキップします

  8. 8

    PowerShellでWinSCP.NETアセンブリを使用すると、「ファイル '...'のアップロードは成功しましたが、アクセス許可やタイムスタンプの設定中にエラーが発生しました」

  9. 9

    スプライトキットはワンタッチのみを許可します

  10. 10

    Travis条件付きデプロイメント:エラー「ブランチは許可されていません」でスキップされたブランチの正規表現を使用してスクリプトをデプロイします

  11. 11

    現在のWiFiネットワークにChromecastデバイスがあるかどうかをプログラムで検出できますか?

  12. 12

    バッチスクリプトを使用して、名前が<>で始まるディレクトリ内の最新のファイルを検索します

  13. 13

    キーをデプロイするためのGithubSSHアクセス許可が拒否されました

  14. 14

    タプルの最初のインデックスで、値が異なるタプルのリストのインデックスを検索します

  15. 15

    ログファイルのアクセス許可エラーを再実行しますが、アクセス許可はすでに777です

  16. 16

    スクロールバーをカスタマイズし、テキストボックスをスクロールします-ワードプレス

  17. 17

    Windowsは、どのネットワークアダプタがワイヤレスデバイスであるかをどのように認識しますか?

  18. 18

    IAMロールを使用してEC2インスタンスからのみアクセスできるようにするには、S3バケットにどのアクセス許可を割り当てる必要がありますか?

  19. 19

    ユーザーのデバイスに特定のプロファイルがインストールされているかどうかを検出します

  20. 20

    rsyncバックアップはファイルのアクセス許可を台無しにします

  21. 21

    UITableViewを上下にドラッグして、スワイプジェスチャを許可しませんか?

  22. 22

    タッチデバイスでjQueryスクロールバープラグインを無効にしますか?

  23. 23

    既知のUSBデバイスを許可するUdevルールは私のハブを検出しません

  24. 24

    「入力」イベントでバックスペースとデルを検出しますか?

  25. 25

    symfonyバンドルはカスタムプロバイダーを許可します

  26. 26

    タイプ「文字列」のインデックス署名は読み取りのみを許可します

  27. 27

    OSXバックアップディスクからファイルをコピーするときに許可が拒否されました

  28. 28

    私はウェブマスター(フリーランス)へのフルアクセスを許可しました。彼が残した可能性のある悪意のあるスクリプト/ウイルスをチェックするにはどうすればよいですか?

  29. 29

    バッチファイルは、ネットワークパスが見つかりませんでしたというエラーをスローします

ホットタグ

アーカイブ