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);
};