Small refactor to relative_mouse_coords: now the functionality which

returns an element's absolute position on the web page is split out
into a subfunction that can be called directly.

[originally from svn r9819]
This commit is contained in:
Simon Tatham
2013-04-07 10:24:34 +00:00
parent b341d0544d
commit ea25b606cb

View File

@ -103,21 +103,28 @@ var permalink_seed, permalink_desc;
// The undo and redo buttons. Used by js_enable_undo_redo(). // The undo and redo buttons. Used by js_enable_undo_redo().
var undo_button, redo_button; var undo_button, redo_button;
// Helper function which is passed a mouse event object and a DOM // Helper function to find the absolute position of a given DOM
// element, and returns the coordinates of the mouse event relative to // element on a page, by iterating upwards through the DOM finding
// the top left corner of the element by iterating upwards through the // each element's offset from its parent, and thus calculating the
// DOM finding each element's offset from its parent, and thus // page-relative position of the target element.
// calculating the page-relative position of the target element so function element_coords(element) {
// that we can subtract that from event.page{X,Y}.
function relative_mouse_coords(event, element) {
var ex = 0, ey = 0; var ex = 0, ey = 0;
while (element.offsetParent) { while (element.offsetParent) {
ex += element.offsetLeft; ex += element.offsetLeft;
ey += element.offsetTop; ey += element.offsetTop;
element = element.offsetParent; element = element.offsetParent;
} }
return {x: event.pageX - ex, return {x: ex, y:ey};
y: event.pageY - ey}; }
// Helper function which is passed a mouse event object and a DOM
// element, and returns the coordinates of the mouse event relative to
// the top left corner of the element by subtracting element_coords
// from event.page{X,Y}.
function relative_mouse_coords(event, element) {
var ecoords = element_coords(element);
return {x: event.pageX - ecoords.x,
y: event.pageY - ecoords.y};
} }
// Init function called from body.onload. // Init function called from body.onload.