From 17cc04089600bda36e5d3010635967fd7d008f96 Mon Sep 17 00:00:00 2001 From: Andy Joslin Date: Mon, 17 Feb 2014 10:20:39 -0500 Subject: [PATCH] fix(anchorScroll): find offset of nested elements correctly Closes #618 --- js/utils/dom.js | 12 +++--------- test/js/utils/dom.js | 40 --------------------------------------- test/js/utils/dom.unit.js | 10 ++++++++++ 3 files changed, 13 insertions(+), 49 deletions(-) delete mode 100644 test/js/utils/dom.js create mode 100644 test/js/utils/dom.unit.js diff --git a/js/utils/dom.js b/js/utils/dom.js index 9b45c68fe1..114e4fa41e 100644 --- a/js/utils/dom.js +++ b/js/utils/dom.js @@ -17,16 +17,10 @@ * until we are at the direct child of parentEl * use-case: find scroll offset of any element within a scroll container */ - getPositionInParent: function(el, parentEl) { - var left = 0, top = 0; - while (el && el !== parentEl) { - left += el.offsetLeft; - top += el.offsetTop; - el = el.parentNode; - } + getPositionInParent: function(el) { return { - left: left, - top: top + left: el.offsetLeft, + top: el.offsetTop }; }, diff --git a/test/js/utils/dom.js b/test/js/utils/dom.js deleted file mode 100644 index 97e44e439d..0000000000 --- a/test/js/utils/dom.js +++ /dev/null @@ -1,40 +0,0 @@ - -describe('js/utils/dom', function() { - - describe('getPositionInParent', function() { - it('should return 0,0 if el===parentEl', function() { - var el = {}; - expect(ionic.DomUtil.getPositionInParent(el, el)).toEqual({ - left: 0, - top: 0 - }); - }); - it('should return 0,0 if el is null', function() { - expect(ionic.DomUtil.getPositionInParent(null, null)).toEqual({ - left: 0, - top: 0 - }); - }); - it('should return element offset{Top,Left} of el if el is parent\'s child', function() { - var parent = {}; - var el = {parentNode: parent, offsetLeft: 3, offsetTop: 2}; - expect(ionic.DomUtil.getPositionInParent(el, parent)).toEqual({ - left: 3, - top: 2 - }); - }); - it('should return added element offset{Top,Left} of all children up to parent', function() { - var parent = {}; - var child1 = {parentNode: parent, offsetLeft: 5, offsetTop: 6}; - var child2 = {parentNode: child1, offsetLeft: 10, offsetTop: 11}; - expect(ionic.DomUtil.getPositionInParent(child1, parent)).toEqual({ - left: 5, - top: 6 - }); - expect(ionic.DomUtil.getPositionInParent(child2, parent)).toEqual({ - left: 15, - top: 17 - }); - }); - }); -}); diff --git a/test/js/utils/dom.unit.js b/test/js/utils/dom.unit.js new file mode 100644 index 0000000000..35a8b1cb94 --- /dev/null +++ b/test/js/utils/dom.unit.js @@ -0,0 +1,10 @@ + +describe('js/utils/dom', function() { + + describe('getPositionInParent', function() { + it('should return el.{offsetLeft,offsetTop}', function() { + var el = { offsetLeft: 3, offsetTop: 4 }; + expect(ionic.DomUtil.getPositionInParent(el)).toEqual({ left: 3, top: 4 }); + }); + }); +});