专栏首页acoolgiser_zhuanlanthree.js 源码分析 之 LoadingManager

three.js 源码分析 之 LoadingManager

LoadingManager是一个下载过程中记录、下载完成情况类,当three.js中的一些文件被下载时通过设置LoadingManager可以及时获取当前文件列表中的下载进度
//正在加载的文件管理
     function LoadingManager( onLoad, onProgress, onError ) {
         //设置域
         var scope = this;
         //当前状态为未加载
         var isLoading = false;
 
         var itemsLoaded = 0;
         var itemsTotal = 0;
         var urlModifier = undefined;
        // Refer to #5689 for the reason why we don't set .onStart
         // in the constructor
         //设置回调状态
         this.onStart = undefined;
         this.onLoad = onLoad;
         this.onProgress = onProgress;
         this.onError = onError;
        //单项开始了
         this.itemStart = function ( url ) {
             //下载项总数增加
             itemsTotal ++;
             //如果当前没有下载
             if ( isLoading === false ) {
                 //设置当前开始下载
                 if ( scope.onStart !== undefined ) {
                     //开始下载回调,当前下载的url,当前下载的完的数量,当前下载的总数
                     scope.onStart( url, itemsLoaded, itemsTotal );
                }
            }
             //设置正在下载状态
             isLoading = true;
        };
        //单项结束了
         this.itemEnd = function ( url ) {
             //下载完成,完成数增加
             itemsLoaded ++;
             //设置当前处理完成回调
             if ( scope.onProgress !== undefined ) {
                 //开始下载回调,当前下载的url,当前下载的完的数量,当前下载的总数
                 scope.onProgress( url, itemsLoaded, itemsTotal );
            }
            //总数和下载完成数相同 
             if ( itemsLoaded === itemsTotal ) {
                 //重置下载状态
                 isLoading = false;
                 //回调下载完成回调
                 if ( scope.onLoad !== undefined ) {
 
                     scope.onLoad();
                }
            }
        };
        //单项出现错误了
         this.itemError = function ( url ) {
             //错误回调
             if ( scope.onError !== undefined ) {
                scope.onError( url );
            }
        };
        //设置url解析中间过程
         this.resolveURL = function ( url ) {
            if ( urlModifier ) {
                return urlModifier( url );
            }
            return url;
        };
        //设置url中间转换过程
         this.setURLModifier = function ( transform ) {
            urlModifier = transform;
             return this;
        };
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Gorilla源码分析之gorilla/mux源码分析

    第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

    月牙寂道长
  • Gorilla源码分析之gorilla/context源码分析

    第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

    月牙寂道长
  • Gorilla源码分析之gorilla/rpc源码分析

    版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

    月牙寂道长
  • Fasthttp源码分析之http server源码分析

    版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

    月牙寂道长
  • netty源码分析之 server端的源码分析

    group.channel(NioServerSocketChannel.class) 根据源码以及在分析客户端源码很容易看出来服务端channel的初始化

    用户1418372
  • Mybatis深入源码分析之SqlSessionFactoryBuilder源码分析

    通过上述代码可知:使用了门面模式:定义了Resource类,把复杂过程封装起来,方便用户使用,返回reader为InputStreamReader,指的是读取的...

    须臾之余
  • Android6.0源码分析之View(二)--measure Android6.0源码分析之View(一)

    接着上一篇 Android6.0源码分析之View(一) 紧接着来学习view的measure,(注,开始写博客之后,很明显我的学习效率高多了,研究了俩星期硬是...

    fanfan
  • AutoLine源码分析之入口源码

    AutoLine开源平台是一个开源自动化测试解决方案,基于RobotFramework进行二次开发,支持RobotFramework几乎所有的库。

    苦叶子
  • 【 源码之间 - Flutter 】 FutureBuilder源码分析

    现在回看_FutureBuilderState#initState中对_snapshot进行初始化时: 连接状态是none,数据是提供的初始数据,没有则为nu...

    张风捷特烈

扫码关注云+社区

领取腾讯云代金券