ext-base-dom.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:5k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.1.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ (function(){
  2. var doc = document,
  3. isCSS1 = doc.compatMode == "CSS1Compat",
  4. MAX = Math.max,
  5.         ROUND = Math.round,
  6. PARSEINT = parseInt;
  7. Ext.lib.Dom = {
  8.     isAncestor : function(p, c) {
  9.     var ret = false;
  10. p = Ext.getDom(p);
  11. c = Ext.getDom(c);
  12. if (p && c) {
  13. if (p.contains) {
  14. return p.contains(c);
  15. } else if (p.compareDocumentPosition) {
  16. return !!(p.compareDocumentPosition(c) & 16);
  17. } else {
  18. while (c = c.parentNode) {
  19. ret = c == p || ret;         
  20. }
  21. }             
  22. }
  23. return ret;
  24. },
  25.         getViewWidth : function(full) {
  26.             return full ? this.getDocumentWidth() : this.getViewportWidth();
  27.         },
  28.         getViewHeight : function(full) {
  29.             return full ? this.getDocumentHeight() : this.getViewportHeight();
  30.         },
  31.         getDocumentHeight: function() {            
  32.             return MAX(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, this.getViewportHeight());
  33.         },
  34.         getDocumentWidth: function() {            
  35.             return MAX(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, this.getViewportWidth());
  36.         },
  37.         getViewportHeight: function(){
  38.         return Ext.isIE ? 
  39.             (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) :
  40.             self.innerHeight;
  41.         },
  42.         getViewportWidth : function() {
  43.         return !Ext.isStrict && !Ext.isOpera ? doc.body.clientWidth :
  44.             Ext.isIE ? doc.documentElement.clientWidth : self.innerWidth;
  45.         },
  46.         
  47.         getY : function(el) {
  48.             return this.getXY(el)[1];
  49.         },
  50.         getX : function(el) {
  51.             return this.getXY(el)[0];
  52.         },
  53.         getXY : function(el) {
  54.             var p, 
  55.              pe, 
  56.              b,
  57.              bt, 
  58.              bl,     
  59.              dbd,       
  60.              x = 0,
  61.              y = 0, 
  62.              scroll,
  63.              hasAbsolute, 
  64.              bd = (doc.body || doc.documentElement),
  65.              ret = [0,0];
  66.             
  67.             el = Ext.getDom(el);
  68.             if(el != bd){
  69.             if (el.getBoundingClientRect) {
  70.                 b = el.getBoundingClientRect();
  71.                 scroll = fly(document).getScroll();
  72.                 ret = [ROUND(b.left + scroll.left), ROUND(b.top + scroll.top)];
  73.             } else {  
  74.             p = el;
  75.             hasAbsolute = fly(el).isStyle("position", "absolute");
  76.             while (p) {
  77.             pe = fly(p);
  78.                 x += p.offsetLeft;
  79.                 y += p.offsetTop;
  80.                 hasAbsolute = hasAbsolute || pe.isStyle("position", "absolute");
  81.                 
  82.                 if (Ext.isGecko) {                     
  83.                     y += bt = PARSEINT(pe.getStyle("borderTopWidth"), 10) || 0;
  84.                     x += bl = PARSEINT(pe.getStyle("borderLeftWidth"), 10) || 0;
  85.                     if (p != el && !pe.isStyle('overflow','visible')) {
  86.                         x += bl;
  87.                         y += bt;
  88.                     }
  89.                 }
  90.                 p = p.offsetParent;
  91.             }
  92.             if (Ext.isSafari && hasAbsolute) {
  93.                 x -= bd.offsetLeft;
  94.                 y -= bd.offsetTop;
  95.             }
  96.             if (Ext.isGecko && !hasAbsolute) {
  97.                 dbd = fly(bd);
  98.                 x += PARSEINT(dbd.getStyle("borderLeftWidth"), 10) || 0;
  99.                 y += PARSEINT(dbd.getStyle("borderTopWidth"), 10) || 0;
  100.             }
  101.             p = el.parentNode;
  102.             while (p && p != bd) {
  103.                 if (!Ext.isOpera || (p.tagName != 'TR' && !fly(p).isStyle("display", "inline"))) {
  104.                     x -= p.scrollLeft;
  105.                     y -= p.scrollTop;
  106.                 }
  107.                 p = p.parentNode;
  108.             }
  109.             ret = [x,y];
  110.             }
  111.           }
  112.             return ret
  113.         },
  114.         setXY : function(el, xy) {
  115.             (el = Ext.fly(el, '_setXY')).position();
  116.             
  117.             var pts = el.translatePoints(xy),
  118.              style = el.dom.style,
  119.              pos;            
  120.             
  121.             for (pos in pts) {             
  122.             if(!isNaN(pts[pos])) style[pos] = pts[pos] + "px"
  123.             }
  124.         },
  125.         setX : function(el, x) {
  126.             this.setXY(el, [x, false]);
  127.         },
  128.         setY : function(el, y) {
  129.             this.setXY(el, [false, y]);
  130.         }
  131.     };
  132. })();