⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boxcomponent.js

📁 ajax框架extjs是一套完整的富客户端解决方案
💻 JS
字号:
/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

/** * @class Ext.BoxComponent * @extends Ext.Component * Base class for any visual {@link Ext.Component} that uses a box container.  BoxComponent provides automatic box * model adjustments for sizing and positioning and will work correctly withnin the Component rendering model.  All * container classes should subclass BoxComponent so that they will work consistently when nested within other Ext * layout containers. * @constructor * @param {Ext.Element/String/Object} config The configuration options. */Ext.BoxComponent = Ext.extend(Ext.Component, {    /**     * @cfg {Number} x     * The local x (left) coordinate for this component if contained within a positioning container.     */    /**     * @cfg {Number} y     * The local y (top) coordinate for this component if contained within a positioning container.     */    /**     * @cfg {Number} pageX     * The page level x coordinate for this component if contained within a positioning container.     */    /**     * @cfg {Number} pageY     * The page level y coordinate for this component if contained within a positioning container.     */    /**     * @cfg {Number} height     * The height of this component in pixels (defaults to auto).     */    /**     * @cfg {Number} width     * The width of this component in pixels (defaults to auto).     */    /**     * @cfg {Boolean} autoHeight     * True to use height:'auto', false to use fixed height. Note: although many components inherit this config option, not all will function as expected with a height of 'auto'. (defaults to false).     */    /**     * @cfg {Boolean} autoWidth     * True to use width:'auto', false to use fixed width. Note: although many components inherit this config option, not all will function as expected with a width of 'auto'. (defaults to false).     */    /* // private internal config     * {Boolean} deferHeight     * True to defer height calculations to an external component, false to allow this component to set its own     * height (defaults to false).     */	// private    initComponent : function(){        Ext.BoxComponent.superclass.initComponent.call(this);        this.addEvents(            /**             * @event resize             * Fires after the component is resized.             * @param {Ext.Component} this             * @param {Number} adjWidth The box-adjusted width that was set             * @param {Number} adjHeight The box-adjusted height that was set             * @param {Number} rawWidth The width that was originally specified             * @param {Number} rawHeight The height that was originally specified             */            'resize',            /**             * @event move             * Fires after the component is moved.             * @param {Ext.Component} this             * @param {Number} x The new x position             * @param {Number} y The new y position             */            'move'        );    },    // private, set in afterRender to signify that the component has been rendered    boxReady : false,    // private, used to defer height settings to subclasses    deferHeight: false,    /**     * Sets the width and height of the component.  This method fires the {@link #resize} event.  This method can accept     * either width and height as separate numeric arguments, or you can pass a size object like {width:10, height:20}.     * @param {Number/Object} width The new width to set, or a size object in the format {width, height}     * @param {Number} height The new height to set (not required if a size object is passed as the first arg)     * @return {Ext.BoxComponent} this     */    setSize : function(w, h){        // support for standard size objects        if(typeof w == 'object'){            h = w.height;            w = w.width;        }        // not rendered        if(!this.boxReady){            this.width = w;            this.height = h;            return this;        }        // prevent recalcs when not needed        if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){            return this;        }        this.lastSize = {width: w, height: h};        var adj = this.adjustSize(w, h);        var aw = adj.width, ah = adj.height;        if(aw !== undefined || ah !== undefined){ // this code is nasty but performs better with floaters            var rz = this.getResizeEl();            if(!this.deferHeight && aw !== undefined && ah !== undefined){                rz.setSize(aw, ah);            }else if(!this.deferHeight && ah !== undefined){                rz.setHeight(ah);            }else if(aw !== undefined){                rz.setWidth(aw);            }            this.onResize(aw, ah, w, h);            this.fireEvent('resize', this, aw, ah, w, h);        }        return this;    },    /**     * Sets the width of the component.  This method fires the {@link #resize} event.     * @param {Number} width The new width to set     * @return {Ext.BoxComponent} this     */    setWidth : function(width){        return this.setSize(width);    },    /**     * Sets the height of the component.  This method fires the {@link #resize} event.     * @param {Number} height The new height to set     * @return {Ext.BoxComponent} this     */    setHeight : function(height){        return this.setSize(undefined, height);    },    /**     * Gets the current size of the component's underlying element.     * @return {Object} An object containing the element's size {width: (element width), height: (element height)}     */    getSize : function(){        return this.el.getSize();    },    /**     * Gets the current XY position of the component's underlying element.     * @param {Boolean} local (optional) If true the element's left and top are returned instead of page XY (defaults to false)     * @return {Array} The XY position of the element (e.g., [100, 200])     */    getPosition : function(local){        if(local === true){            return [this.el.getLeft(true), this.el.getTop(true)];        }        return this.xy || this.el.getXY();    },    /**     * Gets the current box measurements of the component's underlying element.     * @param {Boolean} local (optional) If true the element's left and top are returned instead of page XY (defaults to false)     * @return {Object} box An object in the format {x, y, width, height}     */    getBox : function(local){        var s = this.el.getSize();        if(local === true){            s.x = this.el.getLeft(true);            s.y = this.el.getTop(true);        }else{            var xy = this.xy || this.el.getXY();            s.x = xy[0];            s.y = xy[1];        }        return s;    },    /**     * Sets the current box measurements of the component's underlying element.     * @param {Object} box An object in the format {x, y, width, height}     * @return {Ext.BoxComponent} this     */    updateBox : function(box){        this.setSize(box.width, box.height);        this.setPagePosition(box.x, box.y);        return this;    },    // protected    getResizeEl : function(){        return this.resizeEl || this.el;    },    // protected    getPositionEl : function(){        return this.positionEl || this.el;    },    /**     * Sets the left and top of the component.  To set the page XY position instead, use {@link #setPagePosition}.     * This method fires the {@link #move} event.     * @param {Number} left The new left     * @param {Number} top The new top     * @return {Ext.BoxComponent} this     */    setPosition : function(x, y){        if(x && typeof x[1] == 'number'){            y = x[1];            x = x[0];        }        this.x = x;        this.y = y;        if(!this.boxReady){            return this;        }        var adj = this.adjustPosition(x, y);        var ax = adj.x, ay = adj.y;        var el = this.getPositionEl();        if(ax !== undefined || ay !== undefined){            if(ax !== undefined && ay !== undefined){                el.setLeftTop(ax, ay);            }else if(ax !== undefined){                el.setLeft(ax);            }else if(ay !== undefined){                el.setTop(ay);            }            this.onPosition(ax, ay);            this.fireEvent('move', this, ax, ay);        }        return this;    },    /**     * Sets the page XY position of the component.  To set the left and top instead, use {@link #setPosition}.     * This method fires the {@link #move} event.     * @param {Number} x The new x position     * @param {Number} y The new y position     * @return {Ext.BoxComponent} this     */    setPagePosition : function(x, y){        if(x && typeof x[1] == 'number'){            y = x[1];            x = x[0];        }        this.pageX = x;        this.pageY = y;        if(!this.boxReady){            return;        }        if(x === undefined || y === undefined){ // cannot translate undefined points            return;        }        var p = this.el.translatePoints(x, y);        this.setPosition(p.left, p.top);        return this;    },    // private    onRender : function(ct, position){        Ext.BoxComponent.superclass.onRender.call(this, ct, position);        if(this.resizeEl){            this.resizeEl = Ext.get(this.resizeEl);        }        if(this.positionEl){            this.positionEl = Ext.get(this.positionEl);        }    },    // private    afterRender : function(){        Ext.BoxComponent.superclass.afterRender.call(this);        this.boxReady = true;        this.setSize(this.width, this.height);        if(this.x || this.y){            this.setPosition(this.x, this.y);        }else if(this.pageX || this.pageY){            this.setPagePosition(this.pageX, this.pageY);        }    },    /**     * Force the component's size to recalculate based on the underlying element's current height and width.     * @return {Ext.BoxComponent} this     */    syncSize : function(){        delete this.lastSize;        this.setSize(this.autoWidth ? undefined : this.el.getWidth(), this.autoHeight ? undefined : this.el.getHeight());        return this;    },    /* // protected     * Called after the component is resized, this method is empty by default but can be implemented by any     * subclass that needs to perform custom logic after a resize occurs.     * @param {Number} adjWidth The box-adjusted width that was set     * @param {Number} adjHeight The box-adjusted height that was set     * @param {Number} rawWidth The width that was originally specified     * @param {Number} rawHeight The height that was originally specified     */    onResize : function(adjWidth, adjHeight, rawWidth, rawHeight){    },    /* // protected     * Called after the component is moved, this method is empty by default but can be implemented by any     * subclass that needs to perform custom logic after a move occurs.     * @param {Number} x The new x position     * @param {Number} y The new y position     */    onPosition : function(x, y){    },    // private    adjustSize : function(w, h){        if(this.autoWidth){            w = 'auto';        }        if(this.autoHeight){            h = 'auto';        }        return {width : w, height: h};    },    // private    adjustPosition : function(x, y){        return {x : x, y: y};    }});Ext.reg('box', Ext.BoxComponent);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -