欢迎来到皮皮网官网

【牛气霸屏源码4.2.3】【raid分析工具源码】【apm源码解析添加】loading源码

时间:2024-12-23 07:57:36 来源:卫星直播app源码

1.一看就会的超实用小组件之LoadingButton
2.网页播放flash的进度条代码?
3.手把手Element UI&Plus里Loading的极致封装!只需0.5行超简洁使用
4.求一个flash loading源代码
5.Rematch 源码系列四、牛气霸屏源码4.2.3Third-Party plugins

loading源码

一看就会的超实用小组件之LoadingButton

       ç»„件背景

       åœ¨å¹³æ—¶çš„工作中,经常会遇到一个场景:

       ç‚¹å‡»æŒ‰é’®æ—¶è¯·æ±‚一些接口数据,而为了避免用户重复的点击我们通常会为这些按钮添加loading。这个添加loading的功能本身时非常简单的,只要我们定义一个变量使用在Button组件中即可,但在做后台管理类项目时,这样的按钮可能会有非常非常多,可能一个组件中,很多变量都是xxx_loading,耗时耗力又不够优雅。接下来,我们对Button组件做一个简单的封装来解决这个耗时耗力又不够优雅的loading问题

灵感来源

       æˆ‘们在使用Antd的Modal对话框时,当我们的onOk为异步函数时,此时Modal的确定按钮会自动添加loading效果,在函数执行完成后关闭弹窗,就像这样:此时,代码如下:

asyncFunc(){ returnnewPromise(resolve=>{ setTimeout(()=>{ resolve()},raid分析工具源码)})},handleTestModal(){ constthat=thisthis.$confirm({ title:'测试异步函数',content:'异步函数延迟两秒结束',asynconOk(){ awaitthat.asyncFunc()}})},

       çœ‹åˆ°è¿™ç§æ•ˆæžœåŽï¼Œå°±æƒ³åˆ°ï¼Œå¦‚果可以封装一个Button组件,将需要执行的函数传入,组件中自动根据函数执行情况添加loading效果岂不是非常的方便。

实现LoadingButton定义组件参数

       è¿™è¾¹å°±å®šä¹‰å‡ ä¸ªå¤§å®¶ä¼šå¸¸ç”¨åˆ°çš„参数:text(按钮文字)、type(按钮类型)、asyncFunc(按钮点击时执行的异步函数)、delay(loading延迟),另外,还需要一个组件内部的loading变量来控制我们Button组件的状态,代码如下:

exportdefault{ data(){ return{ loading:false}},props:{ text:{ type:String,default:'确定'},type:{ type:String,default:'primary'},delay:{ type:Number,default:0},asyncFunc:{ type:Function,default:()=>{ }}},}使用antd中的Button组件进行二次封装

       åœ¨æˆ‘们的自定义LoadingButton组件中,将上面定义的参数使用起来,并绑定一个click事件,代码如下:

<template><Button:type="type":loading="loading"@click="handleClick">{ { text}}</Button></template><script>import{ Button}from'ant-design-vue'exportdefault{ components:{ Button},methods:{ handleClick(){ }}}</script>判断异步函数asyncFunc

       è¿™ä¸€éƒ¨åˆ†ä¸ºæ•´ä¸ªç»„件最重要的一个部分,即我们如何去判断传入的函数是异步函数,当我们传入的asyncFunc函数是异步函数时,组件才需要添加loading的动画,那么我们应该如何去判断一个函数是否为异步函数呢?

参考antd是如何实现的?

       ä¸Šé¢æˆ‘们刚介绍了antd的Modal对话框中有类似的逻辑,那么不妨去阅读一下这部分相关的源码,看下antd的实现方式:

//components/modal/ActionButton.jsxonClick(){ const{ actionFn,closeModal}=this;if(actionFn){ letret;if(actionFn.length){ ret=actionFn(closeModal);}else{ ret=actionFn();if(!ret){ closeModal();}}if(ret&&ret.then){ this.setState({ loading:true});ret.then((...args)=>{ //It'sunnecessarytosetloading=false,fortheModalwillbeunmountedafterclose.//this.setState({ loading:false});closeModal(...args);},e=>{ //Emiterrorwhencatchpromisereject//eslint-disable-next-lineno-consoleconsole.error(e);//See:/post/

网页播放flash的进度条代码?

       var myLoading:MovieClip;

       var loadInfo:MovieClip;

       var _lineBgcolor = "0x";

       var _lineColor = "0xFF";

       var _lineLen:Number = ;

       var _lineH:Number = 3;

       var _txtColor; var _txtAlign:String = "center";

       var tb:Number;

       var txtFormat:TextFormat = new TextFormat

       ("Arial", null, 0xffffff, true); myLoading = _root.createEmptyMovieClip("myLoading",); //进度条

       loadInfo = myLoading.createEmptyMovieClip("line", );

       loadInfo.lineStyle(1, _lineColor, );

       loadInfo.moveTo(0, 0);

       loadInfo.lineTo(_lineLen, 0);

       loadInfo.lineTo(_lineLen, _lineH);

       loadInfo.lineTo(0, _lineH);

       loadInfo.lineTo(0, 0); //进度显示文本

       loadInfo.createTextField("txt", , 0, 0, _lineLen, );

       loadInfo.txt.autoSize = _txtAlign; //设置进度条的位置(居中于主场景)

       loadInfo._x = (Stage.width - _lineLen)/2;

       loadInfo._y = Stage.height/2; //获得影片大小并stop,再onEnterFrame

       tb = _root.getBytesTotal();

       _root.stop();

       myLoading.onEnterFrame = function(){

        var lb:Number = _root.getBytesLoaded();

        var percent:Number = Math.round(lb/tb*);

        loadInfo.txt.text = percent+"%";

        loadInfo.txt.setTextFormat(txtFormat);

        loadInfo.lineStyle(_lineH,apm源码解析添加 _lineBgcolor, );

        loadInfo.moveTo(0, _lineH/2);

        loadInfo.lineTo(percent*_lineLen/, _lineH/2);

        if (percent == ) {

        _root.play();

        delete this.onEnterFrame;

        loadInfo.clear();

        loadInfo.txt.text = "";

        }

       }

       

copyright © 2016 powered by 皮皮网   sitemap