Flex 编写 loading 组件

Flex 界面初始化有时那个标准的进度条无法显示,界面长时间会处理空白的状态!我们来自定义一个进度条,

这个进度条加载在 Application 应用程序界面的 <s:Application 标签的 preinitialize 属性上:

preinitialize="preInit(event, ‘‘)"

它就可以比 Flex 自执行的正常显示。

1.组件ZtipWindow.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/mx"
         addedEffect="{fadeIn}" removedEffect="{fadeOut}" >

    <fx:Script>
        <![CDATA[
            import events.ZTipEvent;

            import mx.managers.PopUpManager;

            public var position:Point;

            [Bindable]
            public var icon:Object;

            [Bindable]
            public var message:String;

            [Bindable]
            public var close:Object;

            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
            {
                if (position)
                {
                    x = position.x - unscaledWidth / 2;
                    y = position.y - unscaledHeight / 2;
                }
                super.updateDisplayList(unscaledWidth, unscaledHeight);
            }

            protected function cleTip_clickHandler(event:MouseEvent):void
            {
                this.dispatchEvent(new ZTipEvent(ZTipEvent.CLOSE));
            }

            public function hideClose():void {
                cleTip.visible = false;
                cleTip.height = 0;
                iconOn.top = 12;
                lblOn.top = 10;

//                if (Number(iconOn.bottom) < 15)
//                    iconOn.bottom = 15;
            }

            public function showClose():void {
                cleTip.visible = true;
                cleTip.height = 18;
                iconOn.top = 25;
                lblOn.top = 32;

//                if (Number(iconOn.bottom) < 15)
//                    iconOn.bottom = 15;
            }

        ]]>
    </fx:Script>

    <fx:Declarations>
        <s:Fade id="fadeIn" alphaFrom="0" alphaTo="1" duration="1000"  />
        <s:Fade id="fadeOut" alphaFrom="1" alphaTo="0" duration="2500"  />
    </fx:Declarations>

    <s:layout>
        <s:BasicLayout/>
    </s:layout>

    <s:BitmapImage left="0" right="0" top="0" bottom="0" source="@Embed(source=‘assets/skins/alert/tip_bgz.png‘, scaleGridLeft=‘5‘, scaleGridRight=‘11‘, scaleGridTop=‘6‘, scaleGridBottom=‘48‘)" />

    <s:BitmapImage left="10" top="25" source="{icon}" id="iconOn" />

    <s:Button top="10" right="10" icon="{close}" click="cleTip_clickHandler(event)" id="cleTip" width="18" height="18" />

    <s:Label left="45" right="10" top="32" bottom="20" text="{message}" id="lblOn" verticalAlign="middle" />
</s:Group>

2.事件ZTipEvent.as

package events
{
    import flash.events.Event;

    public class ZTipEvent extends Event
    {
        public static const CLOSE:String = "close";
        public    var detail:int ;
        public function ZTipEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false, detail:int = -1)
        {
            super(type, bubbles, cancelable);
            this.detail = detail;
        }
    }
}

3.主程序类Zloading.as

package command
{
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.utils.setTimeout;

    import components.ZtipWindow;
    import events.ZTipEvent;

    import mx.controls.Alert;
    import mx.core.FlexGlobals;
    import mx.events.CloseEvent;
    import mx.managers.PopUpManager;

    import spark.components.Application;

    public class Zloading
    {
        [Embed(‘assets/skins/alert/tip_loading.png‘)]
        private static var ICON_LOADING:Class;

        [Embed(source="assets/skins/icon/icon_delete.png")]
        private static var ICON_CLOSE:Class;

        private static var tip:ZtipWindow = null;
        private static var mtip:ZtipWindow = null;
        private static var isloading:Boolean = false;
        public function Zloading()
        {

        }

        public static function showTip(message:String, flag:Boolean=true):void {

            if (isloading && tip && flag) {
                PopUpManager.removePopUp(tip);
            }

            isloading = true;
            var showX:Number = Application(FlexGlobals.topLevelApplication).width / 2;
            var showY:Number = Application(FlexGlobals.topLevelApplication).height / 1.5;
            var pos:Point = new Point(showX, showY);
            var app:Application = FlexGlobals.topLevelApplication as Application;

            if (flag || (flag == false && tip == null)) {
                tip = new ZtipWindow();
            }

            if(message.length>80)
            {
                tip.message= message.substr(0,130)+"\r\n"+message.substr(130,message.length-1)
            }
            else
            {
                tip.message = message;
            }

            tip.icon  = ICON_LOADING;
            tip.close = ICON_CLOSE;
            tip.hideClose();

            PopUpManager.addPopUp(tip, app);
            PopUpManager.centerPopUp(tip);

            tip.addEventListener(MouseEvent.MOUSE_DOWN, function():void{
                if (!tip)
                    return;
                tip.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
            });
        }

        public static function timeTip(message:String, pos:Point = null, delay:int = 3000):void {

            if (mtip != null) {
                PopUpManager.removePopUp(mtip);
            }

            if(!pos)
            {
                var showX:Number = Application(FlexGlobals.topLevelApplication).width / 2;
                var showY:Number = Application(FlexGlobals.topLevelApplication).height / 1.5;
                pos = new Point(showX, showY);
            }

            var app:Application = FlexGlobals.topLevelApplication as Application;

            mtip = new ZtipWindow();
            if(message.length>80)
            {
                mtip.message= message.substr(0,130)+"\r\n"+message.substr(130,message.length-1)
            }
            else
            {
                mtip.message = message;
            }

            mtip.icon  = ICON_LOADING;
            mtip.position = pos;
            mtip.close = ICON_CLOSE;
            mtip.hideClose();

            PopUpManager.addPopUp(mtip, app);
            PopUpManager.centerPopUp(mtip);

            mtip.addEventListener(MouseEvent.MOUSE_DOWN, function():void{
                if (!mtip)
                    return;
                mtip.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
            });

            setTimeout(function():void {
                PopUpManager.removePopUp(mtip);
            }, delay);
        }

        public static function close(result:String = ‘数据操作中, 请稍后...‘, delay:int = 3000):void
        {
            if (tip != null) {
                if (delay != 0) {
                    setTimeout(function():void {
                        tip.message = result;
                        PopUpManager.removePopUp(tip);
                        isloading = false;
                    }, delay);
                } else {
                    tip.message = result;
                    tip.showClose();
                    tip.addEventListener(ZTipEvent.CLOSE, function():void {
                        PopUpManager.removePopUp(tip);
                        isloading = false;
                    });
                }
            }
        }
    }
}

4.调用方法

<s:Application
...
preinitialize="preInit(event, ‘‘)"
private function preInit(event:Event, msg:String):void
{
    Zloading.showTip("初始化, 请稍后...");
}

Flex 编写 loading 组件

时间: 2024-10-19 08:53:57

Flex 编写 loading 组件的相关文章

Angular23 loading组件、路由配置、子路由配置、路由懒加载配置

1 需求 由于Angular是单页面的应用,所以在进行数据刷新是进行的局部刷新:在进行数据刷新时从浏览器发出请求到后台响应数据是有时间延迟的,所以在这段时间就需要进行遮罩处理来提示用户系统正在请求数据. 2 loading组件简介 loading组件就是专门负责遮罩处理的,可以自定一个loading组件,也可以使用别人创建号的loading模块:loading组件生效后的效果如下: 参考资料:点击前往 3 编程步骤 3.1 创建一个angular项目 技巧01:版本必须是angular4及以上

Flex 自定义 Zlert 组件!

说明: 原生的 Alert.show 参数,要显示的按钮你只能 Alert.OK | Alert.Cancel 这样; 自定义 Zlert 参数跟原生的 差不多,按钮写法是这样写的: {"btnId":"确定", "btnId2":"其他按钮名称"} ZlertWindow.mxml: com/components <?xml version="1.0" encoding="utf-8&qu

C#编写COM组件

1.新建一个类库项目  2.将Class1.cs改为我们想要的名字  问是否同时给类改名,确定  3.修改Properties目录下面的AssemblyInfo.cs ComVisible属性设置为True  4.项目菜单->MyLib属性 找到"生成"选项卡  往下看,找到"为 COM Interop 注册"勾上  5.继续往下,找到"签名"选项卡   勾上"为程序集签名"   在下面的下拉框里面选择" &l

ReactJS实践(一)—— FrozenUI React化之Loading组件

在前面我们通过四篇文章入门了React的大部分主要API,现在则开始进入实践环节. 实践系列的开篇打算拿我司的FrozenUI来试验,将其部分UI组件进行React化,作为第一篇实践文章,将以较简单的Loading组件来入手,官网demo的效果如下图: 为了更好地开发,后续将以webpack工具来辅助,对其不了解的童鞋可以先查阅我的<webpack 入门指南>一文. 鉴于我们将复用 FrozenUI 的样式,所以在DOM结构.class命名上都应当尽量和原版的保持一致,在这个基础上来实现具有同

flex的Accordion组件头部文本居中显示

flex的Accordion组件头部文本默认是居左的,可以通过设置headerStyleName属性使之居中,另外还可以设置字体的样式等 1 <?xml version="1.0" encoding="utf-8"?> 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 3 xmlns:s="library://ns.adobe.com/flex/spar

同一个节点如何维护多个elementUI loading组件

Element提供了指令和服务两种方式使用它的loading组件 使用指令方式时只需在节点添加指令v-loading并给它一个变量来维护状态,就能实现开启与关闭 下面是element官网提供的服务方式调用loading组件的demo let loadingInstance = Loading.service(options); this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭 loadingInstance.close(); }); 显然,使用

vb中编写asp组件实例的环境已经具备了

下面,我就尝试写两个与asp中基本相类似的函数,也就是说,关键部位就在 这里了,你完全可以把你所有的asp源码封装在这里... 先写个最简单的输出屏幕信息函数: '******************************************** public sub welcomeinfo() myresponse.write ("阿里西西_web开发,欢迎访www.alixixi.com!") end sub '********************************

[Flex] 动态获取组件宽度和高度

flex中我们有时并不想一开始就设置某个组件的宽度和高度,而想动态获取某个组件经填充后的width和height,但是会发现width和height均为0,这时我们可以注册一下两个事件之一来解决. 1 import mx.events.FlexEvent; 2 import mx.events.ResizeEvent; 3 //video为组件VideoPlayer的实例 4 video.addEventListener(FlexEvent.UPDATE_COMPLETE, onUpdateCo

推酷文章中编写js组件系列文章整理

一步一步实现JS拖拽插件 http://www.tuicool.com/articles/RBbmMjY JS组件系列——基于Bootstrap Ace模板的菜单和Tab页效果分享 http://www.tuicool.com/articles/aiiQFjb