2012-05-14 5 views
2

要素内の特定の座標にクリック機能をどのように割り当てることができますか?JQueryでマウスの位置を使用してクリックイベントを設定する

+0

可能性のある複製http://stackoverflow.com/questions/2845178/triggering-a-javascript-click-event-at-specific-coordinates –

+1

私は彼を正しく理解していれば、OPは_register_特定の場所のハンドラであり、イベントを偽装するものではありません。 – Alnitak

+0

どのような細かさ - 長方形、単一のピクセル、何か他の? – Alnitak

答えて

1
$(document).click(function(event) { 
    var top = 0, 
     right = 200, 
     bottom = 200, 
     left = 0; 


    var x = event.pageX; 
    var y = event.pageY; 
    if ((x >= left && x <= right) && (y >= top && y <= bottom)) 
    { 
     // do stuff if within the rectangle 
    } 
}); 
+0

これは問題なく動作しているようですが、クリック可能な領域の幅と高さを簡単に定義する方法はありますか? クリック可能な領域がどこにあるかを定義する助けがありますか? –

+0

Jqueryの$(...)。offset()メソッドを使用して、要素の絶対xとyを取得できます。 同様に、left = $(elm).offset()。left、top = $(elm).offset()。バウンディングボックスの他の辺に必要な幅と高さを追加します。 – Supericy

+0

これはif文ですか? –

0

要素の一部だけをクリックに反応させたい場合(これはあなたの質問の読み方です)は、クリックがどこで発生したのかを調べることで実現できます。

例:live copy | source

jQuery(function($) { 

    $("#target").click(function(event) { 
     var $this = $(this), 
      width = $this.width(), 
      pos = $this.offset(), 
      x = event.pageX - pos.left, 
      y = event.pageY - pos.top; 

     display("Click was at (" + x + "," + y + ") in the element"); 
     if (x > (width/2)) { 
      display("Clicked in the right half"); 
     } 
    }); 


    function display(msg) { 
    $("<p>").html(msg).appendTo(document.body); 
    } 
}); 

event.pageXevent.pageYoffset関数は要素のためにあなたを与えるものです文書座標、です。だから、要素へevent.pageXevent.pageYは、単にevent.pageYからevent.pageXからpos.leftpos.topを差し引くことにより座標変換することができます。(。。それはpositionをだ奇妙なしかし、真の名前にもかかわらず、offsetあなたは、要素のオフセット親に対してオフセット与えるものではありません)。

0

jqueryのすべてのイベントには、pageXpageYプロパティがあります。だから、あなたがイベントを発生した場合は、座標を確認することができます。

$('#elem').click(function(e)) { 
    var x = e.pageX; 
    var y = e.pageY; 
    if (x > x1 && x < x2 && y > y1 && y < y2) { 
     do_something 
    } 
} 

この場合x1x2y1y2は、長方形の座標です。

pageX,pageYはページ内の要素の相対位置を取得する必要がある場合はページ座標で、次に要素の位置を基準とする実際の座標を計算します。

0

ライブ例AlecTMHは、上述したようにhttp://jsfiddle.net/LBKTe/1

基本的には同じこと。

// top left and botom right corners of the clickable area 
var x1 = 10, x2 = 30, y1 = 10, y2 = 30; 
$(document).on('click', '#block', function(e) { 
    // get x/y coordinates inside  
    var cx = e.clientX; 
    var cy = e.clientY; 
    offset = $(this).offset(); 
    x = cx-offset.left; 
    y = cy-offset.top; 

    // if our click coordinates are within constrains, show an alert 
    if (x >= x1 && x <= x2 && y >= y1 && y <= y2) { 
     alert('click!');    
    } 
}); 
1

Hiya デモhttp://jsfiddle.net/gYkXS/3/

は、この情報がお役に立てば幸い素晴らしいものを持っています!乾杯!

コード

$(document).ready(function(){ 
    $("#foo").mousemove(function(e){ 
     window.xPos = e.pageX; 
     window.yPos = e.pageY; 
     alert("Position X = " + e.pageX + "Position y = " + e.pageY); 
    }); 
});​ 
0

「関心のある分野」のほんの数があります場合は、必要なサイズの一個の以上の空の要素を重ね合わせて全体の要素の上でマウスクリックをキャプチャ避けることができますposition: absoluteスタイルと高いz-index、すなわちで:

.hotspot { 
    position: absolute; 
    z-index: 1000; 
    cursor: pointer; 
    cursor: hand; 
} 

div { 
    position: relative; 
} 

canvas { 
    background-color: #f0f0f0; 
} 
​ 
<div class="frame"> 
    <canvas width="400" height="400"> </canvas> 
    <div class="hotspot" style="left: 100px; top: 100px; width: 40px; height: 40px"> 
    </div> 
</div> 

を参照してください

+0

残念なことに、私はそこに他の機能を混乱させなければクリック機能のための要素がないようにする必要があります。 –

関連する問題