ext-base-dom.js
资源名称:ext-3.0.0.zip [点击查看]
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:5k
源码类别:
中间件编程
开发平台:
JavaScript
- /*! * Ext JS Library 3.0.0 * Copyright(c) 2006-2009 Ext JS, LLC * licensing@extjs.com * http://www.extjs.com/license */ (function(){
- var doc = document,
- isCSS1 = doc.compatMode == "CSS1Compat",
- MAX = Math.max,
- PARSEINT = parseInt;
- Ext.lib.Dom = {
- isAncestor : function(p, c) {
- var ret = false;
- p = Ext.getDom(p);
- c = Ext.getDom(c);
- if (p && c) {
- if (p.contains) {
- return p.contains(c);
- } else if (p.compareDocumentPosition) {
- return !!(p.compareDocumentPosition(c) & 16);
- } else {
- while (c = c.parentNode) {
- ret = c == p || ret;
- }
- }
- }
- return ret;
- },
- getViewWidth : function(full) {
- return full ? this.getDocumentWidth() : this.getViewportWidth();
- },
- getViewHeight : function(full) {
- return full ? this.getDocumentHeight() : this.getViewportHeight();
- },
- getDocumentHeight: function() {
- return MAX(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, this.getViewportHeight());
- },
- getDocumentWidth: function() {
- return MAX(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, this.getViewportWidth());
- },
- getViewportHeight: function(){
- return Ext.isIE ?
- (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) :
- self.innerHeight;
- },
- getViewportWidth : function() {
- return !Ext.isStrict && !Ext.isOpera ? doc.body.clientWidth :
- Ext.isIE ? doc.documentElement.clientWidth : self.innerWidth;
- },
- getY : function(el) {
- return this.getXY(el)[1];
- },
- getX : function(el) {
- return this.getXY(el)[0];
- },
- getXY : function(el) {
- var p,
- pe,
- b,
- bt,
- bl,
- dbd,
- x = 0,
- y = 0,
- scroll,
- hasAbsolute,
- bd = (doc.body || doc.documentElement),
- ret = [0,0];
- el = Ext.getDom(el);
- if(el != bd){
- if (el.getBoundingClientRect) {
- b = el.getBoundingClientRect();
- scroll = fly(document).getScroll();
- ret = [b.left + scroll.left, b.top + scroll.top];
- } else {
- p = el;
- hasAbsolute = fly(el).isStyle("position", "absolute");
- while (p) {
- pe = fly(p);
- x += p.offsetLeft;
- y += p.offsetTop;
- hasAbsolute = hasAbsolute || pe.isStyle("position", "absolute");
- if (Ext.isGecko) {
- y += bt = PARSEINT(pe.getStyle("borderTopWidth"), 10) || 0;
- x += bl = PARSEINT(pe.getStyle("borderLeftWidth"), 10) || 0;
- if (p != el && !pe.isStyle('overflow','visible')) {
- x += bl;
- y += bt;
- }
- }
- p = p.offsetParent;
- }
- if (Ext.isSafari && hasAbsolute) {
- x -= bd.offsetLeft;
- y -= bd.offsetTop;
- }
- if (Ext.isGecko && !hasAbsolute) {
- dbd = fly(bd);
- x += PARSEINT(dbd.getStyle("borderLeftWidth"), 10) || 0;
- y += PARSEINT(dbd.getStyle("borderTopWidth"), 10) || 0;
- }
- p = el.parentNode;
- while (p && p != bd) {
- if (!Ext.isOpera || (p.tagName != 'TR' && !fly(p).isStyle("display", "inline"))) {
- x -= p.scrollLeft;
- y -= p.scrollTop;
- }
- p = p.parentNode;
- }
- ret = [x,y];
- }
- }
- return ret
- },
- setXY : function(el, xy) {
- (el = Ext.fly(el, '_setXY')).position();
- var pts = el.translatePoints(xy),
- style = el.dom.style,
- pos;
- for (pos in pts) {
- if(!isNaN(pts[pos])) style[pos] = pts[pos] + "px"
- }
- },
- setX : function(el, x) {
- this.setXY(el, [x, false]);
- },
- setY : function(el, y) {
- this.setXY(el, [false, y]);
- }
- };
- })();