谁能告诉我如何将点击功能分配给元素内的特定坐标?
6 回答
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);
});
});
$(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
. 奇怪但真实。)所以你可以通过简单地减去from和from来转换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
是页面坐标,如果您需要元素内的相对坐标,则需要获取该元素在页面上的位置,然后根据元素位置计算实际坐标。
现场示例http://jsfiddle.net/LBKTe/1
与上述 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!');
}
});
如果只有少量“感兴趣的区域”,您可以通过将一个或多个具有所需大小的空元素与position: absolute
style 和 high叠加来避免捕获整个元素上的鼠标点击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>