0

500ミリ秒後に「open」APIコマンドを使用してコンテキストメニューを開く単純なロングタッチ機能を接続しました。メニューが開きます。ただし、「touchend」ではメニューが消えます。「touchend」の前にコンテキストメニューをタッチムーブした場合にのみ残ります。この種の動作を防ぐ方法はありますか? ソース コードから、dom の別の部分での "touchstart" のみが close イベントをトリガーする必要があります。

役に立つ場合に備えて、コードを以下に示します。コンテキスト メニューで tr のデリゲートが必要なわけではありません。以下で targetTr 変数を使用する方法を説明します。

var mobDevice_onLongTouch,
    mobDevice_touchTimer,
    mobDevice_longPressDuration = 500; //length of time we want the user to touch before we do something

//handle long press on the datatable
var touchArea = document.querySelector("#table");
touchArea.addEventListener("touchstart", touchAreaTouchStart, false);
touchArea.addEventListener("touchend", touchAreaTouchEnd, false);

function touchAreaTouchStart(e) {
    var targetTr = $(e.target).closest('tr');
    mobDevice_touchTimer = setTimeout(function () { touchArea_onLongTouch(targetTr) }, mobDevice_longPressDuration)
};
function touchAreaTouchEnd(e) {
    if (mobDevice_touchTimer) {
        clearTimeout(mobDevice_touchTimer) //reset the clock
    }
};

function touchArea_onLongTouch(target) {
    $('#table').contextmenu('open', target);
};
4

1 に答える 1