要素内の特定の座標にクリック関数を割り当てる方法を教えてもらえますか?
6 に答える
ひやデモ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);
});
});
$(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
}
});
要素の一部だけがクリックに応答するようにしたい場合(これが私があなたの質問を読む方法です)、クリックが発生した場所を調べることでそれを行うことができます。
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.pageX
およびevent.pageY
はドキュメント座標であり、offset
関数が要素に対して提供するものです。(名前にもかかわらず、offset
要素のオフセット親を基準にしたオフセットは提供されませんposition
。これは奇妙ですが本当です。)したがって、からおよびから減算するだけで、要素の座標に変換event.pageX
および変換できます。event.pageY
pos.left
event.pageX
pos.top
event.pageY
jqueryのすべてのイベントにはプロパティがpageX
ありpageY
ます。したがって、イベントを発生させる場合は、座標を確認できます。
$('#elem').click(function(e)) {
var x = e.pageX;
var y = e.pageY;
if (x > x1 && x < x2 && y > y1 && y < y2) {
do_something
}
}
この場合x1
、、、x2
は長方形y1
のy2
座標です。
pageX
、pageY
はページ座標です。要素内の相対座標が必要な場合は、ページ上の要素の位置を取得し、要素の位置に基づいて実際の座標を計算する必要があります。
基本的には上記のAlecTMHと同じです。
// 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つ以上の空の要素を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>
http://jsfiddle.net/VUx2G/2/を参照してください