谈谈Ext JS的组件——布局的用法续一
盒子布局
盒子布局主要作用是以水平(Ext.layout.container.HBox)或垂直方式(Ext.layout.container.VBox)来划分容器区域。这也是比較常有的布局方式。
使用盒子布局,除了要在容器定义layout配置项外,还须要在子组件指定子组件的宽度(HBox)或高度(VBox)。指定宽度或高度有两种方式。一是直接使用width或height来定义,一是使用flex配置项,依据比例来划分。以下通过一些演示样例来了解一下盒子布局的使用,这里仅仅使用水平盒子作为演示样例,垂直盒子就不演示了。
在页面执行以下代码创建一个400×200的容器。然后使用水平盒子布局加入三个大小分别为50×50、100×100和150×150的面板:
Ext.create('Ext.container.Container',{
    renderTo: Ext.getBody(),
    width:400,
    height:200,
    border: 5,
    style:{
        borderColor:'yellow',
        borderStyle: 'solid'
    },
    layout:{
        type:'hbox'
    },
    defaults:{
        bodyStyle:{
            borderColor: 'red'
        }
    },
    items:[
        {html:'50×50', width:50, height:50},
        {html: '100×100', width:100, height:100},
        {html: '150×150', width:150, height:150}
    ]
});
为了加强演示效果。特意将容器的边框设置为5像素,且以黄色实线显示,而面板的边框也使用红色实线来显示,终于的显示效果例如以下:

从效果图中能够看到。因为子组件的总宽度不能填满容器的宽度, 因而留了非常大一块空白,要预防这样的情况,就要使用flex配置项,比如,将150×150的面板的“width:150”改动为“flex:1”就能够让子组件填满余下的空白了。
改动后的宽度计算规则是先用容器的宽度减去所有固定宽度的子组件的总宽度。再把余下的宽度依据flex设置的比例分配,因为这里仅仅有一个flex。因而会把所有余下宽度所有分配给150×150的面板。
假设不清楚该设置多少宽度给子组件,最好的方式就是使用flex,通过比例划分的方式来分配宽度。
比例划分的计算规则是,先把所以子组件的flex配置项相加作为分母,把各子组件的flex设置作为分子,计算出比例后再乘于容器的宽度就是子组件的宽度。
比如,将演示样例中的三个子组件的flex依次设置为1、2、4,那各子组件的宽度将依次为总宽度的1/7、2/7和4/7。使用除法,不可避免的要对计算值进行取整。这样,取整后的总宽度就有可能不是容器的总宽度,因而。在最后都会调整最后一个子组件的宽度以便所有子组件的宽度等于总宽度。
在效果图中,你会发现假设各个子面板的高度都不同。就会出现这样的不太美观的效果,当然,有时候可能须要这样的效果,但总的来说还是高度统一为容器的高度较美观。假设要让高度统一为容器高度,能够在layout的配置对象内将align配置项定义为stretch。代码例如以下:
layout:{
    type:'hbox',
    align:'stretch'
},
对于align配置项来说。还有其它对齐方式可选:
- begin:假设是水平盒子布局。则是顶部对齐,假设是垂直盒子布局,则左对齐。
 - middle:假设是水平盒子布局。则是垂直居中对齐,假设是垂直盒子布局,则是水平居中对齐。
 - end:假设是水平盒子布局,则是底部对齐。假设是垂直盒子布局。则是右对齐。
 - stretchmax:假设是水平盒子布局,则对齐高度最高的那个子组件。假设是垂直盒子布局,则对齐宽度最宽的那个子组件。
 
拆分条
在盒子布局中也是能够使用拆分条的。只是它使用的组件与边框布局不同。它使用的是Ext.resizer.Splitter组件。要在盒子布局设置拆分条,与边框布局的使用方法是一样的。要注意的是,水平盒子布局的拆分条是固定绑定在子组件的左边的。而垂直盒子布局的拆分条是固定绑定在组件的顶部的,总的来说,不管是水平盒子布局还是垂直盒子布局。在第一个子组件设置拆分条是没有效果的。
装箱
假设确实须要效果图中的效果。但希望所有子组件居中显示。能够在layout的配置对象中将pack配置项设置为center,代码例如以下:
layout:{
    type:'hbox',
    pack: 'center'
},
这样,效果图中的三个子组件就会水平居中显示了。假设要右对齐(水平盒子布局)或底部对齐(垂直盒子布局),可将pack的值设置为end。pack的默认值为start,也就是效果图中的效果。
自适应布局(Ext.layout.container.Fit)
自适应布局就是把子组件的尺寸设置为容器的尺寸。全然填满容器的可视空间,这是一种常有比較。也比較简单,仅仅要把layout的类型设置为fit即可了。
普通情况下,仅仅有在容器仅仅有一个子组件的情况下才适合使用自适应布局,不然,当有多个子组件时,就会每个子组件都会和容器的尺寸一样,显示就会出问题。
这时候,应该使用盒子布局或者卡片布局。
卡片布局(Ext.layout.container.Card)
卡片布局与自适应布局一样,都会把子组件的尺寸设置未容器的尺寸,不同之处在于。它能够拥有多个子组件,但每次仅仅显示当中一个。为了能对子组件进行切换。特意在布局中加入了getNext、getPrev、next、prev和setActiveItem等方法。要调用这些方法,须要先调用容器的getLayout方法返回布局对象,再调用它的方法。
居中布局(Ext.layout.container.Center)
居中布局非常easy,就是把子组件所有居中显示。与盒子布局一样。它也是使用绝对定位的方式来实现子组件居中显示的。
居中布局典型的应用是显示图片预览时。在容器内居中显示图片组件。
与自适应布局一样。容器内一般都是仅仅有一个子组件。
假设容器内有多个子组件,所以子组件都会居中显示,只是显示是层叠式的,例如以下图:

上图的效果仅仅是把上面演示样例中的布局改动未居中布局,把尺寸大的子组件作为第一个子组件。把尺寸最小的子组件作为最后一个子组件。从图中的效果能够看到,居中布局会依子组件的定义次序来层叠子组件,也就是最后一个渲染的子组件会显示在最前面。
未完待续……
请大家尊重作者的辛勤劳动,未经同意。请不要转载本文,毕竟读者的支持是作者撰写文章的动力。
谈谈Ext JS的组件——布局的用法续一的更多相关文章
- 谈谈Ext JS的组件——布局的用法续二
		
绝对布局(Ext.layout.container.Absolute) 绝对布局让我回忆到了使用Foxpro开发的时候,哪时候的界面布局就是这样.通过设置控件的左上角坐标(x.y)和宽度来进行的,由于 ...
 - 谈谈Ext JS的组件——布局的用法
		
概述 在Ext JS中.包括两类布局:组件类布局和容器类布局.由于有些组件是有不同的组件组合而成的,如字段就由标题和输入框构成,他们之间也是存在布局关系的,而这就须要组件类布局来处理组件内自己特有的布 ...
 - 谈谈Ext JS的组件——布局的使用方法续二
		
绝对布局(Ext.layout.container.Absolute) 绝对布局让我回想到了使用Foxpro开发的时候,哪时候的界面布局就是这样,通过设置控件的左上角坐标(x,y)和宽度来进行的,因为 ...
 - 谈谈Ext JS的组件——布局的使用方法续一
		
盒子布局 盒子布局主要作用是以水平(Ext.layout.container.HBox)或垂直方式(Ext.layout.container.VBox)来划分容器区域.这也是比较常有的布局方式. 使用 ...
 - 谈谈Ext JS的组件——布局的使用方法
		
概述 在Ext JS中,包含两类布局:组件类布局和容器类布局.由于有些组件是有不同的组件组合而成的,如字段就由标题和输入框构成,他们之间也是存在布局关系的,而这就需要组件类布局来处理组件内自己特有的布 ...
 - 谈谈Ext JS的组件——组件基类:Ext.Component
		
概述 Ext.Component是所有Ext组件的基类,这在Ext.Component的API中第一句话就提到了.然后第二段说明了它包含的基本功能:隐藏/显示.启用/禁用以及尺寸控制等.除了以上这些基 ...
 - 谈谈Ext JS的组件——容器与布局
		
概述 在页面中,比较棘手的地方就是布局.而要实现布局,就得有能维护布局的容器.可以说,在我试过和使用过的Javascript框架中,Ext JS的布局是做得最棒的一个,而这得益于它强大的容器类和丰富的 ...
 - Ext.js高级组件
		
第二章:Ext.js高级组件 grid组件 普通方式 表格面板类Ext.grid.Panel xtype(别名):gridpanel.grid title标题.renderTo渲染至.width宽.h ...
 - 98.Ext.form.Label组件的基本用法
		
转自:https://www.cnblogs.com/kelly/archive/2009/06/05/1496897.html 本篇介绍Ext.form.Label组件的基本用法: 这里通过上一篇介 ...
 
随机推荐
- A Tutorial on Network Embeddings
			
A Tutorial on Network Embeddings paper:https://arxiv.org/abs/1808.02590 NE 的中心思想就是找到一种映射函数,该函数将网络中 ...
 - jQuery实现,动态自动定位弹窗。JS分页,Ajax请求
			
工作中碰到一个问题,一个页面中碰到多个地方需要弹窗数据. 网上找了一圈,没有找到合适的,所以自己写了一个. 兼容IE7+,chrome.其它未测试. 需求:点击任意的输入框(也可其它元素,代码中有注释 ...
 - hdu 1428(很好的一道题,最短路+记忆化搜索)
			
漫步校园 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
 - K8S的APISERVER,应用了HTTPS之后,命令行如何访问?
			
用命令行总是很麻烦,因为要自定义一些证书的位置....... curl https://1.2.3.1:443/api/v1/nodes \ --cacert /etc/kubernetes/pki/ ...
 - [水煮 ASP.NET Web API2 方法论](1-7)CSRF-Cross-Site Request Forgery
			
问题 通过 CSRF(Cross-Site Request Forgery)防护,保护从 MVC 页面提交到ASP.NET Web API 的数据. 解决方案 ASP.NET 已经加入了 CSRF 防 ...
 - SPOJ - SUBST1 D - New Distinct Substrings
			
D - New Distinct Substrings 题目大意:求一个字符串中不同子串的个数. 裸的后缀数组 #include<bits/stdc++.h> #define LL lon ...
 - .net中 Timer定时器
			
作者:feiying008 在开发一套视觉系统时,发现系统内存一直不断增加,直至系统内存爆满.一开始还以为是程序内存泄露,是图像操作算法写的有问题,但是,发现如果电机轴如果 不运行的状态下,每隔一秒进 ...
 - HDU 4863 Centroid of a Tree
			
树的重心,树形$dp$,背包. 树的重心有两个充分必要条件: $1$.某树有两个重心$a$,$b$ $<=>$ $a$与$b$相邻,断开$a$与$b$之间的边之后,两个联通分量内的点的个数 ...
 - jsp页面中获取session中的值
			
Jsp中获取Session: session是jsp的内置对象,所以你可以直接写在jsp的 <% session.setAttribute("a", b); //把b放到se ...
 - SOAP Handler
			
概述 SOAP Handler是一个SOAP message的拦截器,它可以拦截进来或出去两个方向的SOAP message,修改并决定是否放行. 例如: 在服务端启用一个handler,拦截请求的m ...