我不会使用偏移量,而是使用 pageX/pageY (jQuery 标准化这些)。如果光标的第一个鼠标移动事件比任何其他边缘更靠近左边缘,则它来自左侧。您还可以考虑使用悬停事件,而不是鼠标移动。
JSFiddle,由牙买加国旗提供。http://jsfiddle.net/MJTkk/1/ http://jsfiddle.net/MJTkk/1/
function closestEdge(x,y,w,h) {
var topEdgeDist = distMetric(x,y,w/2,0);
var bottomEdgeDist = distMetric(x,y,w/2,h);
var leftEdgeDist = distMetric(x,y,0,h/2);
var rightEdgeDist = distMetric(x,y,w,h/2);
var min = Math.min(topEdgeDist,bottomEdgeDist,leftEdgeDist,rightEdgeDist);
switch (min) {
case leftEdgeDist:
return "left";
case rightEdgeDist:
return "right";
case topEdgeDist:
return "top";
case bottomEdgeDist:
return "bottom";
}
}
function distMetric(x,y,x2,y2) {
var xDiff = x - x2;
var yDiff = y - y2;
return (xDiff * xDiff) + (yDiff * yDiff);
}