Невозможно сказать, что мышь находится над прозрачным пикселем вашего круга: вы должны проверить, пересекается ли мышь с реальным кругом (да, действительно). На самом деле, это проще, чем это может показаться. Учитывая диаметр вашего круга является шириной вашего изображения (что представляется вполне возможным для меня), вы просто должны проверить, что курсор мыши находится в пределах радиуса окружности (которая будет шириной / 2):
function intersectsCircle(diameter, center, mousePosition)
{
var radius = diameter / 2;
// compute the distance between mousePosition and center
var deltaX = mousePosition.x - center.x;
var deltaY = mousePosition.y - center.y;
return Math.sqrt(deltaX * deltaX + deltaY * deltaY) < radius;
}
И вам просто нужно передать необходимую информацию (мой ржавый Javascript, так что последующие могут быть не совсем точными, особенно перепроверить часть событий):
function intersects(target, event)
{
var center = {x: target.x + target.width / 2, y: target.y + target.height / 2};
var mousePosition = {x: event.clientX, y: event.clientY};
if(intersectsCircle(target.width, center, mousePosition))
alert('Foo');
}
<img onmouseover="intersects(this, event)" src="circle.png" />