Element.position-more.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:7k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.1.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /**
  2.  * @class Ext.Element
  3.  */
  4. Ext.Element.addMethods({
  5.     /**
  6.      * Sets the element's box. Use getBox() on another element to get a box obj. If animate is true then width, height, x and y will be animated concurrently.
  7.      * @param {Object} box The box to fill {x, y, width, height}
  8.      * @param {Boolean} adjust (optional) Whether to adjust for box-model issues automatically
  9.      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
  10.      * @return {Ext.Element} this
  11.      */
  12.     setBox : function(box, adjust, animate){
  13.         var me = this,
  14.          w = box.width, 
  15.          h = box.height;
  16.         if((adjust && !me.autoBoxAdjust) && !me.isBorderBox()){
  17.            w -= (me.getBorderWidth("lr") + me.getPadding("lr"));
  18.            h -= (me.getBorderWidth("tb") + me.getPadding("tb"));
  19.         }
  20.         me.setBounds(box.x, box.y, w, h, me.animTest.call(me, arguments, animate, 2));
  21.         return me;
  22.     },
  23.     /**
  24.      * Return an object defining the area of this Element which can be passed to {@link #setBox} to
  25.      * set another Element's size/location to match this element.
  26.      * @param {Boolean} contentBox (optional) If true a box for the content of the element is returned.
  27.      * @param {Boolean} local (optional) If true the element's left and top are returned instead of page x/y.
  28.      * @return {Object} box An object in the format<pre><code>
  29. {
  30.     x: &lt;Element's X position>,
  31.     y: &lt;Element's Y position>,
  32.     width: &lt;Element's width>,
  33.     height: &lt;Element's height>,
  34.     bottom: &lt;Element's lower bound>,
  35.     right: &lt;Element's rightmost bound>
  36. }
  37. </code></pre>
  38.      * The returned object may also be addressed as an Array where index 0 contains the X position
  39.      * and index 1 contains the Y position. So the result may also be used for {@link #setXY}
  40.      */
  41. getBox : function(contentBox, local) {     
  42.     var me = this,
  43.          xy,
  44.          left,
  45.          top,
  46.          getBorderWidth = me.getBorderWidth,
  47.          getPadding = me.getPadding, 
  48.          l,
  49.          r,
  50.          t,
  51.          b;
  52.         if(!local){
  53.             xy = me.getXY();
  54.         }else{
  55.             left = parseInt(me.getStyle("left"), 10) || 0;
  56.             top = parseInt(me.getStyle("top"), 10) || 0;
  57.             xy = [left, top];
  58.         }
  59.         var el = me.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
  60.         if(!contentBox){
  61.             bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
  62.         }else{
  63.             l = getBorderWidth.call(me, "l") + getPadding.call(me, "l");
  64.             r = getBorderWidth.call(me, "r") + getPadding.call(me, "r");
  65.             t = getBorderWidth.call(me, "t") + getPadding.call(me, "t");
  66.             b = getBorderWidth.call(me, "b") + getPadding.call(me, "b");
  67.             bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
  68.         }
  69.         bx.right = bx.x + bx.width;
  70.         bx.bottom = bx.y + bx.height;
  71.         return bx;
  72. },
  73.     /**
  74.      * Move this element relative to its current position.
  75.      * @param {String} direction Possible values are: "l" (or "left"), "r" (or "right"), "t" (or "top", or "up"), "b" (or "bottom", or "down").
  76.      * @param {Number} distance How far to move the element in pixels
  77.      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
  78.      * @return {Ext.Element} this
  79.      */
  80.      move : function(direction, distance, animate){
  81.         var me = this,        
  82.          xy = me.getXY(),
  83.          x = xy[0],
  84.          y = xy[1],        
  85.          left = [x - distance, y],
  86.          right = [x + distance, y],
  87.          top = [x, y - distance],
  88.          bottom = [x, y + distance],
  89.         hash = {
  90.          l : left,
  91.          left : left,
  92.          r : right,
  93.          right : right,
  94.          t : top,
  95.          top : top,
  96.          up : top,
  97.          b : bottom, 
  98.          bottom : bottom,
  99.          down : bottom         
  100.         };
  101.         
  102.       direction = direction.toLowerCase();    
  103.       me.moveTo(hash[direction][0], hash[direction][1], me.animTest.call(me, arguments, animate, 2));
  104.     },
  105.     
  106.     /**
  107.      * Quick set left and top adding default units
  108.      * @param {String} left The left CSS property value
  109.      * @param {String} top The top CSS property value
  110.      * @return {Ext.Element} this
  111.      */
  112.      setLeftTop : function(left, top){
  113.     var me = this,
  114.      style = me.dom.style;
  115.         style.left = me.addUnits(left);
  116.         style.top = me.addUnits(top);
  117.         return me;
  118.     },
  119.     
  120.     /**
  121.      * Returns the region of the given element.
  122.      * The element must be part of the DOM tree to have a region (display:none or elements not appended return false).
  123.      * @return {Region} A Ext.lib.Region containing "top, left, bottom, right" member data.
  124.      */
  125.     getRegion : function(){
  126.         return Ext.lib.Dom.getRegion(this.dom);
  127.     },
  128.     
  129.     /**
  130.      * Sets the element's position and size in one shot. If animation is true then width, height, x and y will be animated concurrently.
  131.      * @param {Number} x X value for new position (coordinates are page-based)
  132.      * @param {Number} y Y value for new position (coordinates are page-based)
  133.      * @param {Mixed} width The new width. This may be one of:<div class="mdetail-params"><ul>
  134.      * <li>A Number specifying the new width in this Element's {@link #defaultUnit}s (by default, pixels)</li>
  135.      * <li>A String used to set the CSS width style. Animation may <b>not</b> be used.
  136.      * </ul></div>
  137.      * @param {Mixed} height The new height. This may be one of:<div class="mdetail-params"><ul>
  138.      * <li>A Number specifying the new height in this Element's {@link #defaultUnit}s (by default, pixels)</li>
  139.      * <li>A String used to set the CSS height style. Animation may <b>not</b> be used.</li>
  140.      * </ul></div>
  141.      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
  142.      * @return {Ext.Element} this
  143.      */
  144.     setBounds : function(x, y, width, height, animate){
  145.     var me = this;
  146.         if (!animate || !me.anim) {
  147.             me.setSize(width, height);
  148.             me.setLocation(x, y);
  149.         } else {
  150.             me.anim({points: {to: [x, y]}, 
  151.               width: {to: me.adjustWidth(width)}, 
  152.               height: {to: me.adjustHeight(height)}},
  153.                      me.preanim(arguments, 4), 
  154.                      'motion');
  155.         }
  156.         return me;
  157.     },
  158.     /**
  159.      * Sets the element's position and size the specified region. If animation is true then width, height, x and y will be animated concurrently.
  160.      * @param {Ext.lib.Region} region The region to fill
  161.      * @param {Boolean/Object} animate (optional) true for the default animation or a standard Element animation config object
  162.      * @return {Ext.Element} this
  163.      */
  164.     setRegion : function(region, animate) {
  165.         return this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.animTest.call(this, arguments, animate, 1));
  166.     }
  167. });