0

二重イベントを防止するという問題が発生しています

まず、トリガーするコードがあります

jQuery(window).trigger('swipeForward');

これはこのトリガーをリッスンします

jQuery(window).on('swipeForward', swipeHandlerNext );

スワイプ ハンドラーの考え方は、ユーザーが 2 回スワイプして二重イベントを作成できないようにすることです。

次に、swipeHandlerNext 関数を実行します。

function swipeHandlerNext(event) {

    // If event isn't already marked as handled, handle it
    if(event.handled !== true) {

        // Kill event handler, preventing any more clicks
        jQuery(".pageSize").off("swipeForward");

        // Do your stuff here
        pageSize = jQuery(".mainHeader").width();
        slide("forward", pageSize);

        console.log(" swipe complete page forward via swipe");

        // Mark event as handled
        event.handled = true;
    } 

    return false;
}

これは明らかにスライド機能を実行します。これは .animate コマンドを持つものです

function slide(data, pageSize) {


    if (!pageSize) {
    pageSize = jQuery(".mainHeader").width();
    }

    var promise  = calcLeft(data, pageSize);


    jQuery.when(promise).then(function(result) {

        console.log(result);

        jQuery('#pageHolder').delay(500).animate({
            left: result

          }, 400, function() {
            console.log("animation started");
            calcNav(pageSize);
            calcPage(pageSize);
            jQuery(".pageSize").on("swipeForward", swipeHandlerNext);
            console.log("animation complete");

        });


    });

}

ただし、ダブルスライドを防止するものではありません。

助けてくれてありがとう

4

1 に答える 1

2

Off()あなたの例でうまくいかないのはなぜですか

jQuery のoff()メソッドは、セレクターがmatch the one originally passed to .on() when attaching event handlers.

最初のイベント バインディングでは、イベントをwindow要素にアタッチしていjQuery(window).on(...)ます。ただし、ハンドラー関数では、イベントを削除してから、とを使用して.pageSize要素に再アタッチしています。jQuery('.pageSize').off(...)jQuery('.pageSize').on(...)

つまり、要素にバインドされたイベント ハンドラーを実際に削除していないwindowため、ユーザーはスワイプを続けることができます。

event.handledあなたの例でうまくいかないのはなぜですか

スワイプ イベントが発生するたびに、個別 eventのオブジェクトが作成され、ハンドラーに渡されます。したがって、eventオブジェクトは、その後のスワイプで変更してステータスを確認できるグローバル変数ではありません。

あなたの例に従った可能な解決策

  1. on()およびメソッドに渡されるセレクターを一致させoff()ます。
  2. スワイプが進行中であることを示すものとして、グローバル変数を設定および設定解除します。
于 2013-02-22T00:39:57.717 に答える