• Extjs--12种布局方式


    转自http://blog.csdn.net/u012116457/article/details/48803883
    按照Extjs的4.1的文档来看,extjs的布局方式大致有12种,下面一一介绍,有些代码就是文档中的。

    1.Border 边界布局

    border布局,最多可以将页面分割为“东南西北中”五部分,是最常用的一种布局方式。我们可以根据项目的实际需求保留其中的部分区域,而将其他部分隐藏掉。
    1
    2
    1.1效果图预览
    这里写图片描述
    1.2 代码demo

    Ext.onReady(function () {
    //border布局 最多可将页面划分为5个区域
    //使用Viewport容器 可自适应页面窗口大小
    //一个页面只可有一个viewport
    new Ext.Viewport({
    title: "border layout",
    layout: "border",
    defaults: {
    bodyStyle: "background-color: #FFFFFF;",
    frame: true
    },
    items: [
    //collapsible:是否可折叠
    { region: "west", 90, title: 'west', collapsible: true },
    { region: "east", 90, title: 'east', collapsible: true },
    { region: "north", height: 100, title:'north' , collapsible:true },
    { region: "center", split: true, border: true, collapsible: true,title:'center' },
    { region: "south", title:"south", split: true, border: true, collapsible: true, height: 100 },

    ]
    });
    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    1.3 关注点
    a.north和south区域需要指定高度height,west和east区域需要指定宽度width。
    b.尽管当不包含center组件时,页面并不会由于语法错误而无法显示,但页面中会有一部分区域空出来。所以在使用border布局时,必须要定义其center区域。
    c.center域不必赋予其宽度和高度,即使你定义了其宽高也不会有任何效果;当其他区域未定义比如south,center域会自动填充空出来的部分,如下图:
    这里写图片描述

    2.accordion 手风琴布局【可折叠布局】

    可折叠的accordion通常被用来作为导航栏或一级菜单来使用,手风琴的每个title定义为一级菜单,在其面板上定义菜单树,就是一个完整的导航了。
    2.1 预览
    这里写图片描述

    2.2代码demo

    Ext.onReady(function () {
    //定义手风琴布局
    var accordion = Ext.create("Ext.panel.Panel", {
    title: "west",
    layout: "accordion", //设置为手风琴布局
    layoutConfig: {
    animate: true
    },
    250,
    minWidth: 90,
    region: "west", //设置方位 位于border布局的west
    split: true,
    collapsible: true,
    items: [
    { title: "面板一", html: "面板一", iconCls: "save" },
    { title: "面板二", html: "面板二", iconCls: "search" },
    { title: "面板三", html: "面板三", iconCls: "back" },
    { title: "面板四", html: "面板四", iconCls: "12" }
    ]
    });
    //整体布局采用border
    new Ext.Viewport({
    title: "Viewport",
    layout: "border", //这里是(border)边界布局
    defaults: {
    bodyStyle: "background-color: #FFFFFF;",
    frame: true
    },
    items: [
    accordion, //这里是(accordion)手风琴布局
    {region: "east", 90, title: 'east', collapsible: true },
    { region: "north", height: 100, title: 'north', collapsible: true },
    { region: "center", split: true, border: true, collapsible: true, title: 'center' },
    { region: "south", title: "south", split: true, border: true, collapsible: true, height: 100 }
    ]
    });
    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    2.3 关注点
    a.只有 Ext的各种Panel和Ext.panel.Panel的子类可以用于这种布局的容器中.

    3.Anchor 锚点布局

    锚点布局将子元素与父容器绑定到了一块,当父容器大小发生改变时,所有固定的子项将按各自的anchor 规则自动被重新渲染固定.
    3.1 预览图
    这里写图片描述
    3.2 代码demo

    Ext.onReady(function(){
    //锚点布局
    //容器内子项通过比例布局
    //若容器大小改变 子元素等比缩放
    Ext.application({
    name: 'anchor',
    launch: function () {
    Ext.create('Ext.Panel', {
    500,
    height: 400,
    title: "AnchorLayout Panel",
    layout: 'anchor',
    x:100,
    y:100,
    renderTo: Ext.getBody(),
    items: [
    {
    xtype: 'panel',
    title: '75% Width and 20% Height',
    anchor: '75% 20%'
    },
    {
    xtype: 'panel',
    title: 'Offset -300 Width & -200 Height',
    anchor: '-300 -200'
    },
    {
    xtype: 'panel',
    title: 'Mixed Offset and Percent',
    anchor: '-250 20%'
    }
    ]
    });

    }});


    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    3.3 关注点
    a.上述代码中anchor属性有三种写法
    一、anchor: ‘75% 20%’ 子元素宽度为容器的75%,高度为20%
    二、 anchor: ‘-300 -200’ 子元素距离容器右边距300,底部200
    三、anchor: ‘-250 20%’ 混合模式 子元素距离右边250,高度为20%
    b.xtype用来定义子元素的类型

    4.Absolute 绝对布局

    Absolute布局继承自anchor,但是absolute是使用标准的x,y来定义子元素的坐标,所以当父容器大小改变时,子元素不会随之变化。
    1
    2
    4.1 预览图
    这里写图片描述
    4.2代码demo

    Ext.onReady(function(){
    //绝对布局
    //通过指定坐标来布局
    //由于指定了坐标 无法自适应
    Ext.application({
    name: 'absolute',
    launch: function () {
    Ext.create('Ext.form.Panel', {
    title: 'Absolute Layout',
    300,
    height: 275,
    x:400,
    y:100,
    layout: {
    type: 'absolute'
    },
    url:'save-form.php',
    defaultType: 'textfield',
    items: [{
    x: 10,
    y: 10,
    xtype:'label',
    text: 'Send To:'
    },{
    x: 80,
    y: 10,
    name: 'to',
    // anchor:'90%' // anchor width by percentage
    },{
    x: 10,
    y: 40,
    xtype:'label',
    text: 'Subject:'
    },{
    x: 80,
    y: 40,
    name: 'subject',
    // anchor: '90%' // anchor width by percentage
    },{
    x:0,
    y: 80,
    xtype: 'textareafield',
    name: 'msg',
    // anchor: '100% 100%' // anchor width and height
    }],
    renderTo: Ext.getBody()
    });


    }});

    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    4.3 关注点
    a.上面代码的预览中,如果改变父容器的大小,子元素不会随着变化,但有时我们既想使用坐标来定位,又希望子元素随容器变化,这时可以使用anchor属性,你可以去掉代码中的相关注释试试看。由于absolute是继承自anchor的,所有可以使用该属性。

    5.Card 卡片布局

    card管理多个子组件, 每个都完全填满父容器, 而每次仅显示一个. 此布局样式多用于向导, 实现标签页布局等等
    5.1 效果图预览
    这里写图片描述
    这里写图片描述
    5.2 代码demo

    Ext.onReady(function(){

    //卡片布局 可以定义多个卡片 但每次只显示一个
    //可以通过setActiveItem指定
    //常用来做向导、分步提交
    Ext.application({
    name: 'card',
    launch: function () {
    var navigate = function (panel, direction) {
    var layout = panel.getLayout();
    layout[direction]();
    Ext.getCmp('move-prev').setDisabled(!layout.getPrev());
    Ext.getCmp('move-next').setDisabled(!layout.getNext());
    };
    Ext.create('Ext.panel.Panel', {
    title: 'Card布局示例',
    300,
    height: 202,
    layout: 'card',
    activeItem: 0, //默认显示的card 从0号开始
    x: 30,
    y: 60,
    bodyStyle: 'padding:15px',
    defaults: { border: false },
    //bbar 底部工具栏 tbar顶部工具栏
    bbar: [{
    id: 'move-prev',
    text: '上一步',
    handler: function (btn) {
    navigate(btn.up("panel"), "prev");
    },
    disabled: true
    },
    '->',
    {
    id: 'move-next',
    text: '下一步',
    handler: function (btn) {
    navigate(btn.up("panel"), "next");
    }
    }],
    items: [{
    id: 'card-0',
    html: '<h1>第一步</h1>'
    },
    {
    id: 'card-1',
    html: '<h1>第二步</h1>'
    },
    {
    id: 'card-2',
    html: '<h1>最后一步</h1>'
    }],
    renderTo: Ext.getBody()
    });
    }
    });
    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    6.Fit

    能使当容器只包含一个子元素时, 子元素自动填满容器
    6.1 预览
    这里写图片描述
    6.2 代码demo

    Ext.onReady(function(){

    Ext.application({
    name:"fit",
    launch:function(){
    //当设置为fit的面板有唯一的子组件时会自动填充满
    Ext.create('Ext.panel.Panel', {
    title: 'Fit Layout',
    300,
    height: 150,
    layout:'fit',
    items: [{
    title: 'Inner Panel',
    html: 'This is the inner panel content',
    bodyPadding: 20,
    border: false
    }],
    renderTo: Ext.getBody()
    });

    }

    });

    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    6.3关注点
    a.如果你想要使用fit实现布局,就应该只给其一个子元素

    7.form 表单布局

    这个布局会将表单中所有的输入框纵向的依次的排列, 且宽度与容器宽度相等.
    1
    2
    7.1预览
    这里写图片描述
    7.2 代码demo

    Ext.onReady(function(){

    Ext.application({
    name:"form",
    launch:function(){
    //表单布局 所有输入框(表单项)纵向依次排列
    //表单项宽度与容器宽度一致

    Ext.create('Ext.Panel', {
    500,
    height: 300,
    title: "FormLayout Panel",
    layout: 'form',
    renderTo: Ext.getBody(),
    bodyPadding: 5,
    defaultType: 'textfield',
    items: [{
    fieldLabel: 'First Name',
    name: 'first',
    allowBlank:false
    },{
    fieldLabel: 'Last Name',
    name: 'last'
    },{
    fieldLabel: 'Company',
    name: 'company'
    }, {
    fieldLabel: 'Email',
    name: 'email',
    vtype:'email'
    }, {
    fieldLabel: 'DOB',
    name: 'dob',
    xtype: 'datefield'
    }, {
    fieldLabel: 'Age',
    name: 'age',
    xtype: 'numberfield',
    minValue: 0,
    maxValue: 100
    }, {
    xtype: 'timefield',
    fieldLabel: 'Time',
    name: 'time',
    minValue: '8:00am',
    maxValue: '6:00pm'
    }]
    });
    }
    });

    });


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    7.3关注点
    a.表单项的宽度与容器一致,所以在Form布局下各子控件的padding属性配置将被忽略

    8.column 列布局

    这个布局用于在一个多列格式中创建结构化布局的布局样式, 每列可以用百分比或固定的宽度值来定义,
    8.1预览
    这里写图片描述
    8.2代码demo

    Ext.onReady(function(){

    Ext.application({
    name:"column",
    launch:function(){
    //列布局 创建一个多列的布局
    //每列的宽度可以通过百分比定义 所有的和为1
    Ext.create('Ext.panel.Panel', {
    title: 'Column Layout - Percentage Only',
    350,
    height: 250,
    layout:'column',
    items: [{
    title: 'Column 1',
    columnWidth: 0.25
    },{
    title: 'Column 2',
    columnWidth: 0.55
    },{
    title: 'Column 3',
    columnWidth: 0.20
    }],
    renderTo: Ext.getBody()
    });
    }
    });

    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    8.3 注意
    a.每列的宽度可以通过百分比定义 所有的和为1

    9.table表格布局

    通过指定rowspan和colspan来实现复杂布局
    9.1预览图
    这里写图片描述
    9.2代码demo

    Ext.onReady(function(){

    Ext.application({
    name:"column",
    launch:function(){
    //通过指定rowspan和colspan来实现复杂布局
    //指定每部分占据几行几列 会自动按顺序分配
    Ext.create('Ext.panel.Panel', {
    title: 'Table Layout',
    500,
    height: 150,
    layout: {
    type: 'table',
    columns: 3
    },
    defaults: {
    bodyStyle: 'padding:20px'
    },
    items: [{
    html: 'Cell A content',
    rowspan: 2
    },{
    html: 'Cell B content',
    colspan: 2
    },{
    html: 'Cell C content',
    cellCls: 'highlight'
    },{
    html: 'Cell D content'
    }],
    renderTo: Ext.getBody()
    });
    }
    });

    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    9.3 关注点
    a.我们指定每部分占据几行几列,该布局会自动按顺序分配

    10.Hbox

    水平box,所有组件水平依次排列
    10.1预览
    这里写图片描述
    10.2 代码demo

    Ext.onReady(function(){

    Ext.application({
    name:"hbox",
    launch:function(){
    //所有组件水平依次排列
    //根据flax的数值按比例分配
    Ext.create('Ext.Panel', {
    500,
    height: 300,
    title: "HBoxLayout Panel",
    layout: {
    type: 'hbox',
    align: 'stretch'
    },
    renderTo: document.body,
    items: [{
    xtype: 'panel',
    title: 'Inner Panel One',
    flex: 2
    },{
    xtype: 'panel',
    title: 'Inner Panel Two',
    flex: 1
    },{
    xtype: 'panel',
    title: 'Inner Panel Three',
    flex: 1
    }]
    });
    }
    });

    });


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    11.Vbox

    垂直box,所有组件垂直依次排列
    11.1预览

    这里写图片描述
    11.2代码demo

    Ext.onReady(function(){

    Ext.application({
    name:"hbox",
    launch:function(){
    //所有组件垂直依次排列
    //根据flax的数值按比例分配
    Ext.create('Ext.Panel', {
    500,
    height: 300,
    title: "HBoxLayout Panel",
    layout: {
    type: 'vbox',
    align: 'stretch'
    },
    renderTo: document.body,
    items: [{
    xtype: 'panel',
    title: 'Inner Panel One',
    flex: 2
    },{
    xtype: 'panel',
    title: 'Inner Panel Two',
    flex: 1
    },{
    xtype: 'panel',
    title: 'Inner Panel Three',
    flex: 1
    }]
    });
    }
    });

    });


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    12 auto 默认布局

    默认的布局方式,不指定layout时的布局方式
    12.1预览
    这里写图片描述
    12.2 代码demo

    Ext.onReady(function(){
    //默认的布局方式
    //此时写不写layout:'auto' 没区别
    Ext.application({
    name: 'auto',
    launch: function () {

    Ext.create('Ext.Panel', {
    '100%',
    height: '100%',
    title: "AutoLayout Panel",
    layout: 'auto',
    renderTo: document.body,
    items: [{
    xtype: 'panel',
    title: 'Top Inner Panel',
    '75%',
    height: 90
    },
    {
    xtype: 'panel',
    title: 'Bottom Inner Panel',
    '75%',
    height: 90
    }]
    });


    }});

    });

  • 相关阅读:
    (总结)Oracle 11g常用管理命令(用户、表空间、权限)
    在 .NET 中使用 FixedTimeEquals 应对计时攻击
    开源的.Net 工作流引擎Elsa初试——创建工作流服务器和图形化工作流配置管理应用
    C# 数字证书 RSA加密解密 加签验签
    C#获取Unix时间戳
    react 带行号的文本框的使用方案
    ThinkPad电池处会发出“吱吱”电流声怎么办
    使用C#和MonoGame开发俄罗斯方块游戏
    C# 通过word模板动态生成Word
    云原生那些顶级开源项目,你都用过哪些?
  • 原文地址:https://www.cnblogs.com/zhangwei99com/p/8066834.html
Copyright © 2020-2023  润新知