• enyo官方开发入门教程翻译一Layout之Panels


    Panels

         enyo.Panels kind用来满足常用的多种应用布局。使用enyo.Panelscontrol可以使用carousel(旋转木马,一组折叠的panels),在panels之间消失切换的卡片布局或 一个grid网格。

    Behavior

    任何一个enyocontrol都可以放在enyo.Panels内部,方便起见我们把这些control称为panel。在enyo.Panels的一组panel中,只有一个是活动的。可以通过setIndex方法设置活动的panel。每次设置active panel真正的panel布局都会改变,所以新的active panel拥有最高的优先级。如果layout将所有的panel放在一个card stack中,设置active panel会显示active panel并隐藏其他的panel

    enyo.Panelsactive状态时支持动画和拖曳。当active panel发生变化时会触发onTransitionStart和onTransitionFinish事件。将animate属性设置为false可以关闭active状态的panel动画。另外panel默认可以拖拽,可以将draggable属性设置为false改变这一默认行为。

    例:

    enyo.kind({

        name: "App",

        kind: "Panels",

        fit: true,

        components: [

            {name: "MyStartPanel"},

            {name: "MyMiddlePanel"},

            {name: "MyLastPanel"}

        ]

    });

     

    Layout

    enyo.Panels的布局由一个特殊的kind arrangerKind控制。现在panels已经有一些Arranger kind

    为了简化使用enyo.Panels时创建arranger kind的过程,使用插值策略渲染activte 设置的状态。这意味着只有处于活动状态的layout需要指定arrangerKind。更详细的信息请参考API

    一些编排策略结合Panel实例可以达到环绕的效果,这样在最后一个panel前进时会回到第一个panel,在第一个panel后退时会到最后一个panel。要达到这个效果,将enyo.PanelsarrangerKind属性指定值为LeftRightArrangerTopBottomArrangerSpiralArranger, 或 GridArranger,wrap值指定为true

    Responsive Design

    Enyo.Panels结合CSS的布局可以自适应不同尺寸的屏幕。怎样改变布局由应用开发者决定,但是当panelsize发生改变时,布局应能做出正确响应。例:

    enyo.kind({

        name: "App",

        kind: "Panels",

        fit: true,

        classes: "app-panels",

        arrangerKind: "CollapsingArranger",

        components: [

            {name: "MyStartPanel"},

            {name: "MyMiddlePanel"},

            {name: "MyLastPanel"}

        ]

    });

    注意,在CollapsingArranger中最后一个panel总是占用可用空间。

    CSS

    /* set the width and some basic styling for each panel */

    .app-panels > * {

         320px;

        background-color: #EAEAEA;

        box-shadow: -4px -4px 4px rgba(0,0,0,0.3);

    }

     

    /* on small devices, make each panel fit to the app width */

    @media all and (max- 800px) {

        .app-panels > * {

            min- 100%;

            max- 100%;

        }

    }

    从技术上讲,第二个CSS语句块并不需要实现size效果。因为enyo.PanelsnarrowFit属性(默认为true)在屏幕足够狭窄时默认截取800px以使每个panel的大小适应应用的大小。

    但是CSS仍然提供了可用的方法使你能够自定义截断宽度。

    我们来修改实例默认截取600px。将narrowFit属性设置为false(关闭默认的行为),应用自定义的CSS样式(“app-panels”)定义新的行为。

    我么也可以重写静态方法Panels.isScreenNarrow(),将800改为600。框架本身并不使用这个方法,它只为应用能够轻易知道是否允许在小屏幕的环境中。(在enyojs.com Flickr sample app有一个如何在导航面板之间应用这个特性的有趣例子。)

    定义一个kind

    enyo.kind({

        name: "App",

        kind: "enyo.Panels",

        fit: true,

        narrowFit: false,

        classes: "app-panels",

        arrangerKind: "CollapsingArranger",

        components: [

            {name: "MyStartPanel", content: "start"},

            {name: "MyMiddlePanel", content: "middle"},

            {name: "MyLastPanel", content: "last"}

        ],

        statics: {

            isScreenNarrow: function() {

                return enyo.dom.getWindowWidth() <= 600;

            }

        }

    });

    CSS样式:

    .app-panels > * {

         320px;

        background-color: #EAEAEA;

        box-shadow: -4px -4px 4px rgba(0,0,0,0.3);

    }

     

    @media all and (max- 600px) {

        .app-panels > * {

            min- 100%;

            max- 100%;

        }

    }

     实现效果的截图没有放上来,可以参考原文https://github.com/enyojs/enyo/wiki/Panels,或到enyo开发包的解压目录lib\layout\panels下的examps和samples文件夹下查看更多示例。

  • 相关阅读:
    WebService安全机制的思考与实践
    Typora
    谷歌隐藏功能开启
    在Idea中jdk11和jdk8环境变量的切换
    win10安装两个不同版本的mysql(mysql5.7和mysql8.0.19)
    Guava中这些Map的骚操作,让我的代码量减少了50%
    MySQL TransactionMySQL锁升级引发的死锁问题
    mac 在 home 目录下创建文件夹
    忍者系统
    DNS服务简介和配置详解
  • 原文地址:https://www.cnblogs.com/waimai/p/2932765.html
Copyright © 2020-2023  润新知