2017-06-28 6 views
1

私は、HTMLボタンでlongclickであるかどうかを検出する方法を考え出しています。 現在のところ、ピクセル単位で移動していますsnapforループが検出された場合にループが実行される

ボタンでholdを検出してforloopで実行する方法はありますか? 私はonlongclickを試しましたが、運がありません。

function load() { 
    var context = document.getElementById('main').getContext("2d"); 
    var left = document.getElementById('left'); 
    var down = document.getElementById('down'); 
    var right = document.getElementById('right'); 
    var imgLoaded = false; 
    var posX = 250; 
    var posY = 0; 
    var snap = 10; 


    var img = new Image(); 
    img.onload = function() { 
     imgLoaded = true; 
     context.drawImage(img, posX, posY); 
    }; 
    img.src = "start.png"; 

    // left button click 
    left.onclick = function() { 
     if (!imgLoaded) return; 
     posX = posX - snap; 
     context.clearRect(0, 0, context.canvas.width, context.canvas.height); 
     context.drawImage(img, posX, posY); 
    }; 

    // down button click 
    down.onclick = function() { 
     if (!imgLoaded) return; 
     posY = posY + snap; 
     context.clearRect(0, 0, context.canvas.width, context.canvas.height); 
     context.drawImage(img, posX, posY); 
    }; 

    // right button click 
    right.onclick = function() { 
     if (!imgLoaded) return; 
     posX = posX + snap; 
     context.clearRect(0, 0, context.canvas.width, context.canvas.height); 
     context.drawImage(img, posX, posY); 
    }; 

} 

HTMLボタン: -

<aside class="socialNetworkNavBar"> 
      <div id="left" style="margin-right: 50px;" class="socialNetworkNav"> 
       <!-- Add a Anchor tag with nested img tag here --> 
       <input type="image" src="images/left.png"> 

      </div> 
      <div id="down" style="margin-right: 50px;" class="socialNetworkNav"> 
       <!-- Add a Anchor tag with nested img tag here --> 
       <input type="image" src="images/down.png"> </div> 
      <div id="right" style="margin-right: 50px;" class="socialNetworkNav"> 
       <!-- Add a Anchor tag with nested img tag here --> 
       <input type="image" src="images/UXwr4.png"> 
      </div> 

     </aside> 

答えて

3

clickマウスがを押したとボタンをリリースイベント、です。あなたはそれが長いクリックしたかどうかを検出したい場合は、mousedownリスナーを追加し、ボタンが押されたことを時間を保存可能性があります

left.onmousedown = function() { 
    left.dataset.start = new Date().getTime(); 
}; 

left.onclick = function() { 
    var diff = new Date() - parseInt(left.dataset.start); 
    if(diff/1000 > 3) { 
     // Mouse-down was more than three seconds ago, this was a long click 
    } 
}; 

あなたはボタンがある間、継続的にアクションを実行する場合まだ押され、あなたが間隔として、そのアクションを実行することができ、ボタンを離したときに、それが中断された:

left.onmousedown = function() { 
    left.dataset.interval = window.setInterval(function() { 
     // perform action 
    }, 250); 
}; 

left.onmouseup = function() { 
    window.clearInterval(parseInt(left.dataset.interval)); 
}; 

left.onmouseout = function() { 
    window.clearInterval(parseInt(left.dataset.interval)); 
}; 
+0

これは興味深いので、onmousedownに基づいてボタンにイベントをバインドできますか? – FreedomPride

+1

いいえ、ボタンを押すと1回だけ発射されます。そのプレスの持続時間の間に連続的に発射したい場合は、間隔を開始する必要があります。 –

+0

これは、DOMプロパティを使用せずに修正するための非常に正当な方法です。正直言って私はそれは不可能だと思ったが、インターバルメソッドを使った。それは良いです。 – FreedomPride

2

私はあなたがonmousedownイベントを探していると思います。キーが押されたときに実行される。キーを放した後に何が起こるかを定義するには、onmouseupイベントも設定する必要があります。

https://www.w3schools.com/jsref/event_onmousedown.asp

+0

ボタンではありません。私はボタンを使用していますが、入力ボタンでどのように検出できますか? – FreedomPride

+0

@FreedomPride次に、ボタンにバインドされた 'onmousedown'イベントと' onmouseup'イベントを使用できます。このデモを見るhttps://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onmousedown – shawon191

+0

@FreedomPride元の回答を更新しました。 – shawon191

1

一般的なUIをダブルクリック(onDoubleClick)、クリ​​ック数(onClick)を検出します、&ドロップ(OnDragはドラッグ)。

それ以外の場合は、onMouseDownonMouseUpで手動で長いクリックを管理できます。

jQueryのonTapHoldで携帯に自動化されたイベントを提供することができます。 https://api.jquerymobile.com/taphold/

をここで同様の答えがあります:あなたが言ったことについてLong Press in JavaScript?


、 "forloopでそれを実行するには"、あなたはそれは非同期ではないので、Javascriptでそれを行うことはできません。 forループは、インターフェースがあなたの変更を表示しないようにします。タイマーを使用してイベントをトリガーし、達成しようとしていることを処理することができます。

関連する問題