This commit is contained in:
Erik Gulliksson 2014-04-16 15:10:40 +00:00
commit a5d4eba96e
1 changed files with 45 additions and 10 deletions

View File

@ -302,18 +302,53 @@ Util.load_scripts = function(files) {
} }
} }
// Get DOM element position on page // Get DOM element position on page
Util.getPosition = function (obj) { // This solution is based based on http://www.greywyvern.com/?post=331
var x = 0, y = 0; // Thanks to Brian Huisman AKA GreyWyvern!
if (obj.offsetParent) { Util.getPosition = (function() {
do { function getStyle(obj, styleProp) {
x += obj.offsetLeft; if (obj.currentStyle) {
y += obj.offsetTop; var y = obj.currentStyle[styleProp];
obj = obj.offsetParent; } else if (window.getComputedStyle)
} while (obj); var y = window.getComputedStyle(obj, null)[styleProp];
return y;
};
function scrollDist() {
var html = document.getElementsByTagName('html')[0];
if (html.scrollTop && document.documentElement.scrollTop) {
return [html.scrollLeft, html.scrollTop];
} else if (html.scrollTop || document.documentElement.scrollTop) {
return [
html.scrollLeft + document.documentElement.scrollLeft,
html.scrollTop + document.documentElement.scrollTop
];
} else if (document.body.scrollTop)
return [document.body.scrollLeft, document.body.scrollTop];
return [0, 0];
};
return function (obj) {
var curleft = 0, curtop = 0, scr = obj, fixed = false;
while ((scr = scr.parentNode) && scr != document.body) {
curleft -= scr.scrollLeft || 0;
curtop -= scr.scrollTop || 0;
if (getStyle(scr, "position") == "fixed") fixed = true;
}
if (fixed && !window.opera) {
var scrDist = scrollDist();
curleft += scrDist[0];
curtop += scrDist[1];
}
do {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
return {'x': curleft, 'y': curtop};
} }
return {'x': x, 'y': y}; })();
};
// Get mouse event position in DOM element // Get mouse event position in DOM element
Util.getEventPosition = function (e, obj, scale) { Util.getEventPosition = function (e, obj, scale) {