ext-base-dom.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:5k
源码类别:

中间件编程

开发平台:

JavaScript

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