异步加载js文件并执行js方法:实现异步处理网页的复杂效果

异步加载js文件并执行js方法:实现异步处理网页的复杂效果     

    有这么一个场景,当你的网页页面效果过多就会造成了打开页面的速度变得缓慢,长时间处于加载的状态,这样的效果通常会让用户感到不友好,通常的处理方法是先加载基本的html,然后再加载其他的网页效果,让用户感觉到页面一下子就出来了,然后其他的网页效果再慢慢的展现出来。     这里通过JSLoader组件来实现这种前端的效果

    var JSLoader = function(){         

        var scripts = {}; // scripts['a.js'] = {loaded:false,funs:[]}         

        function getScript(url){         

            var script = scripts[url];         

            if (!script){             

                script = {loaded:false, funs:[]};             

                scripts[url] = script;             

                add(script, url);         

            }         

 

            return script;     

        }                           

 

        function run(script){         

            var funs = script.funs,             

            len = funs.length,             

            i = 0;                 

            for (; i<len; i++){             

                var fun = funs.pop();             

                fun();         

            }     

        }         

 

        function add(script, url){

            var scriptdom = document.createElement('script');         

            scriptdom.type = 'text/javascript';         

            scriptdom.loaded = false;         

            scriptdom.src = url;                 

            scriptdom.onload = function(){             

                scriptdom.loaded = true;             

                run(script);             

                scriptdom.onload = scriptdom.onreadystatechange = null;         

            };         

 

 

            //for ie       

            scriptdom.onreadystatechange = function(){

                if ((scriptdom.readyState === 'loaded' || scriptdom.readyState === 'complete') && !scriptdom.loaded){                                 

                    run(script);                 '

                    scriptdom.onload = scriptdom.onreadystatechange = null;             

                }         

            };                 

 

            document.getElementsByTagName('head')[0].appendChild(scriptdom);     

        }         

        return {         

            load: function(url){

                var arg = arguments,                 

                len = arg.length,                 

                i = 1,                 

                script = getScript(url),                 

                loaded = script.loaded;                         

                for (; i<len; i++){                 

                    var fun = arg[i];                 

                    if (typeof fun === 'function'){                     

                        if (loaded) {                         

                            fun();                     

                        }else{                         

                            script.funs.push(fun);

                        }                 

                    }             

                }       

            }     

        };

    }();

 

    调用方法示例: 先在页面上加载JSLoader.js文件

    然后执行  JSLoader.load('js/test.js' , function () {a();})

    表示异步加载test.js文件,并且加载完成后再执行a()方法,a()方法是test.js里面的方法,a()方法就是负责渲染一些前端页面的网页效果来的。 不过该方法在ie7下并不会产生异步的效果,在ie7下需要使用延时触发器来包装一下,如:

    setTimeout(" JSLoader.load('js/test.js' , function () {a();})", 1);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.java的基础和数据类型

一.学习要求1.听课一定要全神贯注2.课堂笔记&#xff0c;一定要自己总结&#xff0c;而且要有很严谨的逻辑关系。提纲很重要3.作业不折不扣的完成&#xff0c;并且多完成4.阶段项目一定要独立完成5.每天早上由一位同学来进行早分享&#xff0c;内容可以是昨天或者明天的学习内容…

JavaScript DOM操作 提高篇

做为一个web前端&#xff0c;处理和了解浏览器差异一个重要问题.下面将介绍本人在工作中的一些笔记总结&#xff0c;先介绍没有使用js库的情况。 1.  setAttribute方法设置元素类名 &#xff1a; 在jQuery中&#xff0c;直接使用attr()方法即可&#xff0c;可在原生的JS中 e…

《算法竞赛进阶指南》0.5排序

103. 电影 莫斯科正在举办一个大型国际会议&#xff0c;有n个来自不同国家的科学家参会。 每个科学家都只懂得一种语言。 为了方便起见&#xff0c;我们把世界上的所有语言用1到109之间的整数编号。 在会议结束后&#xff0c;所有的科学家决定一起去看场电影放松一下。 他们去的…

Spring Cloud Gateway(五):路由定位器 RouteLocator

本文基于 spring cloud gateway 2.0.1 1、简介 直接 获取 路 由 的 方法 是 通过 RouteLocator 接口 获取。 同样&#xff0c; 该 顶 级 接口 有多 个 实现 类&#xff0c; RouteLocator 路由定位器&#xff0c;顾名思义就是用来获取路由的方法。该路由定位器为顶级接口有多个实…

CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客

CommonJS&#xff0c;AMD&#xff0c;CMD区别 博客分类&#xff1a; seajs和requirejs JavaScript zccst转载 学得比较晕&#xff0c;再次看commonjs&#xff0c;amd, cmd时好像还是没完全弄清楚&#xff0c;今天再整理一下&#xff1a; commonjs是用在服务器端的&#xff…

739. Daily Temperatures

根据每日 气温 列表&#xff0c;请重新生成一个列表&#xff0c;对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高&#xff0c;请输入 0 来代替。 例如&#xff0c;给定一个列表 temperatures [73, 74, 75, 71, 69, 72, 76, 73]&#xff0c;你的输出应…

【NOIP2018】DAY2T2——填数游戏(轮廓线状压的dp?搜索打表)

描述 小 D 特别喜欢玩游戏。这一天&#xff0c;他在玩一款填数游戏。 这个填数游戏的棋盘是一个n m的矩形表格。玩家需要在表格的每个格子中填入一个数字&#xff08;数字 0 或者数字 1&#xff09;&#xff0c;填数时需要满足一些限制。 下面我们来具体描述这些限制。 为了方…

Mysql中遇到的错误

Caused by: java.sql.SQLException: Unknown system variable ‘tx_isolation’ 这种错误是因为数据库版本新的但是mysql的jar包是旧的&#xff0c;所以导入最新的mysqljar包 注意实体类和数据库字段的映射关系&#xff0c;实体类中使用驼峰式的命名规则&#xff0c;大写的字母…

Express 入门之Router - worldtree_keeper的专栏 - CSDN博客

要了解Router我们需要先知道到Application&#xff0c;首先&#xff0c;每一个express实例本身内部就内建了router&#xff0c;所以我们先从简单的下手&#xff0c;先使用application&#xff1b;另外这里我们只选择get方法&#xff0c;作为我们Router.Method, 之所以使用get是…

rest测试定义

1.为什么要做接口测试&#xff1a; 1.因为很多系统关联都是基于接口实现的&#xff0c;接口测试可以将系统复杂的系统关联进行简化 2.接口工程比较单一&#xff0c;能够比较好的进行测试覆盖&#xff0c;也相对容易实现自动化持续集成 3.接口相对于界面功能 &#xff0c;会更底…

团队开发进度报告9

&#xff08;1&#xff09;站立会议 &#xff08;2&#xff09;任务面板 &#xff08;3&#xff09;具体内容 昨天&#xff1a;完成了界面控件按钮的设置问题&#xff1a;PHP数据处理&#xff0c;如何实现在线数据交互问题今天&#xff1a;hbuilder后台环境搭建 转载于:https:/…

nodejs+express整合kindEditor实现图片上传 - 木子丰咪咕晶 - 开源中国

kindEditor官网上中提供了ASP,ASP.NET,JSP相关的整合应用,http://kindeditor.net/docs/upload.html可以参照实现nodejs的整合,发现实用nodejs更简单 环境: unbuntu 14.10 nodejs 0.10.35 express 4.11.2 formidable 1.0.16 kindEditor 4.1.10 webStorm 8 1.通过IDE或终端创建…

基于springboot多模块项目使用maven命令打成war包放到服务器上运行的问题

首先&#xff0c;大家看到这个问题&#xff0c;可能并不陌生&#xff0c;而且脑子里第一映像就是使用mava中的clear package 或者 clear install进行打包&#xff0c;然后在项目中的target文件夹下面找到xxx.war&#xff0c;将这个war包放到外置的tomcat服务器下的webapps下面&…

Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover

1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见。 如果更新数据后&#xff0c;并发访问的情况下可立即感知该更新&#xff0c;称为强一致性 如果允许之后部分或全部感知不到该更新&#xff0c;称为弱一致性。 若在之后的一段时间&…

H5页面随机数字键盘支付页面

H5页面随机数字键盘支付页面 有个H5支付的业务需要随机数字的键盘 参考了下文&#xff1a;https://blog.csdn.net/Mr_Smile2014/article/details/52473351 做了一些小修改&#xff1a; 在原有的基础上&#xff0c;增加了一些按键反馈的效果。 每个按键加上边框。 最终效果&…

expressjs路由和Nodejs服务器端发送REST请求 - - ITeye博客

Nodejs创建自己的server后&#xff0c;我们如果需要从客户端利用ajax调用别的服务器端的数据API的接口&#xff0c;这时候出现了ajax跨域问题。 一种是利用在客户端解决跨域问题 这种方案大家可以去网上查查 另一种方案是在服务器端去请求别的服务器&#xff0c;然后将数据再…

Jmeter操作mysql数据库测试

1. 选中线程组鼠标点击右键添加-->配置元件-->JDBC Connection Configuration&#xff1b; 2. DataBase Connection Configuration配置 Variable Name&#xff1a;配置元件的的所有配置所保存的变量&#xff0c;自定义变量名称(不能使用mysql作为变量名&#xff0c;多个…

axios发送自定义请求头的跨域解决

前端发送来的axios请求信息 this.$axios.request({ url:http://127.0.0.1:8001/pay/shoppingcar/, method:post, headers:{ authenticate:a073b3dabbb140e8b9d28debb6a356a1 # 自定义的请求头部信息键值对, }, # 接上,这种key也算是一种请求头,需要加入django中间件内…

前端“智能”静态资源管理 - Onebox - 博客园

前端“智能”静态资源管理 模块化/组件化开发&#xff0c;仅仅描述了一种开发理念&#xff0c;也可以认为是一种开发规范&#xff0c;倘若你认可这规范&#xff0c;对它的分治策略产生了共鸣&#xff0c;那我们就可以继续聊聊它的具体实现了。 很明显&#xff0c;模块化/组件化…

【转】几张图看懂列式存储

几张图看懂列式存储 转载于:https://www.cnblogs.com/apeway/p/10870211.html