Javascript取得控件的位置,很實用.

  1function getElementPos(elementId) {
  2
  3 
  4
  5var ua = navigator.userAgent.toLowerCase();
  6
  7var isOpera = (ua.indexOf('opera') != -1);
  8
  9var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
 10
 11 
 12
 13var el = document.getElementById(elementId);
 14
 15 
 16
 17if(el.parentNode === null || el.style.display == 'none')
 18
 19{
 20
 21return false;
 22
 23}

 24
 25 
 26
 27var parent = null;
 28
 29var pos = [];
 30
 31var box;
 32
 33 
 34
 35if(el.getBoundingClientRect) //IE
 36
 37{
 38
 39box = el.getBoundingClientRect();
 40
 41var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
 42
 43var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
 44
 45 
 46
 47return {x:box.left + scrollLeft, y:box.top + scrollTop};
 48
 49}

 50
 51else if(document.getBoxObjectFor) // gecko
 52
 53{
 54
 55box = document.getBoxObjectFor(el);
 56
 57
 58var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
 59
 60var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
 61
 62 
 63
 64pos = [box.x - borderLeft, box.y - borderTop];
 65
 66}

 67
 68else // safari & opera
 69
 70{
 71
 72pos = [el.offsetLeft, el.offsetTop];
 73
 74parent = el.offsetParent;
 75
 76if (parent != el) {
 77
 78while (parent) {
 79
 80pos[0+= parent.offsetLeft;
 81
 82pos[1+= parent.offsetTop;
 83
 84parent = parent.offsetParent;
 85
 86}

 87
 88}

 89
 90if (ua.indexOf('opera') != -1
 91
 92|| ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' ))
 93
 94{
 95
 96pos[0-= document.body.offsetLeft;
 97
 98pos[1-= document.body.offsetTop;
 99
100}

101
102}

103
104
105if (el.parentNode) { parent = el.parentNode; }
106
107else { parent = null; }
108
109
110while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML')
111
112// account for any scrolled ancestors
113
114pos[0-= parent.scrollLeft;
115
116pos[1-= parent.scrollTop;
117
118
119if (parent.parentNode) { parent = parent.parentNode; }
120
121else { parent = null; }
122
123}

124
125return {x:pos[0], y:pos[1]};
126
127}
 
128
129
posted @ 2007-07-04 15:11  芙蓉客  阅读(502)  评论(0)    收藏  举报