2012-09-24 8 views
21

この状況に関するstackoverflowに関するいくつかの回答を読んだが、解決策はありません。クリックとマウスとの区別を区別する

ユーザーが要素をクリックするか、jQueryを使用してその要素をマウスで押さえているかによって、さまざまなことをしようとしています。

これは可能ですか?

+1

マウスダウンでグローバル変数を設定@MrOBrian、偽/ trueにするMouseUp、その変数のクリック方法でチェックしていますが、その下のマウスのタイマーを使用して試みることができる – aperture

+0

常に最初のmouseup発射し、変数を設定しますか適切なイベントをバインドして、ボタンが一定時間以上押されたかどうかを確認します。 – MrOBrian

答えて

15

はここ

  1. が真
  2. に変数を設定する一つの方法です
  3. は(setTimeout())のタイマーを持って呼び出されたときにfalseに設定する関数を作る(マウスダウンにダウンカウント開始)のmouseup上
  4. 、タイムアウトをクリアし、変数がtrueまたは
  5. 偽それをあるかどうかを確認
  6. それがfalseの場合、あなたはどのような場合には
  7. クリック
  8. で発生する関数を呼び出して、これはあなたがやりたいだろう真

に戻って変数を設定します。 はここでそれがうまくいくかもしれない方法を示しjsfiddleです:http://jsfiddle.net/zRr4s/3/

+0

良い仕事@daveyfaherty、あなたは本当に私を助けました。 – eyalewin

25

onMouseDownは、左または右(または中央)のいずれかを押すとトリガーされます。同様に、ボタンが離されるとonMouseUpが起動します。 onMouseDownはオブジェクト上でマウスをクリックしてから離してもトリガーしますが、onMouseUpはボタンをクリックしたまま他の場所に置いたままトリガーするとトリガーし、オブジェクトの上にリリースします。

onClickは、同じオブジェクトでマウスの左ボタンを押したときにのみトリガされます。あなたが注文を気にする場合、同じオブジェクトに3つのイベントが設定されていれば、それはonMouseDown、onMouseUp、そしてonClickです。それぞれはたとえ一度だけトリガーすべきです。

詳細:

+0

はい、マウスクリックとマウスアップの時間が十分長い場合はonClickを起動しないようにします。イベントのタイムスタンプとその種類の作品を比較しています。 – aperture

8

ここでは、両方のクリックをサポートし、保持しているソリューションです:

// Timeout, started on mousedown, triggers the beginning of a hold 
var holdStarter = null; 
// Milliseconds to wait before recognizing a hold 
var holdDelay = 500; 
// Indicates the user is currently holding the mouse down 
var holdActive = false; 
// MouseDown 
function onMouseDown(){ 
    // Do not take any immediate action - just set the holdStarter 
    // to wait for the predetermined delay, and then begin a hold 
    holdStarter = setTimeout(function() { 
     holdStarter = null; 
     holdActive = true; 
     // begin hold-only operation here, if desired 
    }, holdDelay); 
} 
// MouseUp 
function onMouseUp(){ 
    // If the mouse is released immediately (i.e., a click), before the 
    // holdStarter runs, then cancel the holdStarter and do the click 
    if (holdStarter) { 
     clearTimeout(holdStarter); 
     // run click-only operation here 
    } 
    // Otherwise, if the mouse was being held, end the hold 
    else if (holdActive) { 
     holdActive = false; 
     // end hold-only operation here, if desired 
    } 
} 
// Optional add-on: if mouse moves out, then release hold 
function onMouseOut(){ 
    onMouseUp(); 
} 

ここでデモです:もともとdaveyfahertyのソリューションに基づいてhttp://jsfiddle.net/M7hT8/1/

。 私はこの質問がしばらく前からあることを知っていますが、私は検索でこれを見つけた人のために私のソリューションを共有しています。

+0

実際、有用なものです。ありがとう! – GuyC

+0

私はこのソリューションをCordovaアプリケーションに使用していますが、タッチとマウスの入力を統一的にサポートするための新しいPointer Events APIを使用しています。 https://mobiforge.com/design-development/html5-pointer-events-api-combining-touch-mouse-and-penを参照してください。 – HEXcube

-1
//last mouse coordinate 
var mouseX = 0; 
//epsilon interval 
var mouseEps = 10; 

function mouseDownHandler(e) { 
    e.preventDefault(); 
    mouseX = e.clientX; 
}; 

function mouseUpHandler(e) { 
    e.preventDefault(); 
    if (Math.abs((mouseX - e.clientX)) < mouseEps) { 
     clickHandler(e); 
    } 
}; 

function clickHandler(e) { 
}; 
関連する問題