Skip to content

Commit

Permalink
Fix Element.viewportOffset on nested elements in Opera < 9.5 and remo…
Browse files Browse the repository at this point in the history
…ve browser sniff.

(cherry picked from commit 0d2d18fb7297fb945ca6983b843c5bcf367c721c)
  • Loading branch information
savetheclocktower committed Dec 5, 2009
1 parent c2c47da commit 7015eb1
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/dom/layout.js
Expand Up @@ -707,21 +707,23 @@
* Returns the X/Y coordinates of element relative to the viewport.
**/
function viewportOffset(forElement) {
var valueT = 0, valueL = 0;
var valueT = 0, valueL = 0, docBody = document.body;

var element = forElement;
do {
valueT += element.offsetTop || 0;
valueL += element.offsetLeft || 0;
// Safari fix
if (element.offsetParent == document.body &&
if (element.offsetParent == docBody &&
Element.getStyle(element, 'position') == 'absolute') break;
} while (element = element.offsetParent);

element = forElement;
var tagName = element.tagName, O = Prototype.Browser.Opera;
element = forElement;
do {
if (!O || tagName && tagName.toUpperCase() === 'BODY') {
// Opera < 9.5 sets scrollTop/Left on both HTML and BODY elements.
// Other browsers set it only on the HTML element. The BODY element
// can be skipped since its scrollTop/Left should always be 0.
if (element != docBody) {
valueT -= element.scrollTop || 0;
valueL -= element.scrollLeft || 0;
}
Expand Down

0 comments on commit 7015eb1

Please sign in to comment.