2

この問題に対して、より洗練された解決策があることを願っています。基本的に、私はタッチスクリーンキオスクで実行されるHTML/Javascriptアプリを持っています。誰かが指をドラッグしてボタンのリストをスクロールしている場合、デフォルトのクリック動作を防止しようとしています。最初は、スワイプイベントを検出したときにDefaultを防止しようとしました。しかし、それから、それは実際には長いマウスダウンほどスワイプイベントではないことに気づきました。だから私は次のコードを書きました:

var downClick;
var startTime;

$(".TPGSW-wrapper").on('mousedown', function () {

    downClick = new Date();
    startTime = downClick.getTime();

});

$(".TPGSW-wrapper").on('mouseup', function () {

    var upClick = new Date();
    var endTime = upClick.getTime();

    if (endTime - startTime < 250) {
        return false;
    } else if (endTime - startTime >= 300) {
        // This is the action that I can't seem to get to work. 
        // I would like it to stop the click event. I also tried mouseup
        this.on('click', function () { preventDefault; });
    }              

});

これはマウスダウンの時間を正しく測定しますが、クリックイベントの発生を止めることができないようです。何か考えや提案はありますか?私はjqueryとこれをWebkitブラウザにのみ使用しています。前もって感謝します!

4

2 に答える 2

2

さて、いくつかのテストの後、私はそれを次のコードで動作させることができました:

var longpress = false;

$(".TPGSW-wrapper").on('click', function (e) {
    (longpress) ?  e.preventDefault() : alert("clicked");
});

var startTime, endTime;
$(".TPGSW-wrapper").on('mousedown', function () {
    startTime = new Date().getTime();
});

$(".TPGSW-wrapper").on('mouseup', function () {
    endTime = new Date().getTime();

    if (endTime - startTime < 250) {
        longpress = false;
        console.log('< 250');
    } else if (endTime - startTime >= 300) {
        longpress = true;
        console.log('>= 300');
    }

});

デモ

マウスを250ミリ秒未満押し続けるとクリックイベントが発生し、300ミリ秒を超えるとe.preventDefaultクリックイベントが呼び出されて停止します。

于 2013-03-25T17:36:01.170 に答える
1
else if (endTime - startTime >= 300) {
    $(this).one('click', function (e) {
        e.preventDefault();
        e.stopImmediatePropagation();
    });
}

「オン」ではなく「1つ」がどのように使用されているかに注意してください。そのため、トリガーされるのは1回だけで、その後は毎回トリガーされません。

または、JCOC611のコメントに従って、mouseupイベントを削除して、次の場所で使用できます。

$(".TPGSW-wrapper").on('click', function (e) {
    var upClick = new Date();
    var endTime = upClick.getTime();

    if (endTime - startTime >= 300) {
        e.preventDefault();
        e.stopImmediatePropagation();
    }              
});
于 2013-03-25T17:36:42.577 に答える