yepnope.js使用详解及示例分享


Posted in Javascript onJune 23, 2014

yepnope.js的一个典型实例:

yepnope({
 test : Modernizr.geolocation,
 yep : 'normal.js',
 nope : ['polyfill.js', 'wrapper.js']
});

此实例表示如果Modernizr.geolocation为真的时候加载normal.js,为假则加载polyfill.js及wrapper.js。

yepnope完整语法

yepnope([{
 test : /* boolean(ish) 输入条件    */,
 yep : /* array (of strings) | string - 条件为真时加载的资源 */,
 nope : /* array (of strings) | string - 条件为假时加载的资源 */,
 both : /* array (of strings) | string - 条件无论真假都加载 */,
 load : /* array (of strings) | string - 条件无论真假都加载 */,
 callback : /* function ( testResult, key ) | object { key : fn } 回调函数 */,
 complete : /* function 加载完成后执行的函数 */
}, ... ]);

为什么使用yepnope

Gzip后只有1.6K比大多数的资源加载器都小
可以加载CSS及JS
yepnope通过了作者能找到的所有的浏览器的测试
yepnope完全分离资源加载和执行,这样你可以控制资源的执行顺序
提供友好的API和促进资源的逻辑组合
模块化设计,你可以自己扩充功能(见稍后的Prefixes及filters)
鼓励按需加载资源
集成在 Modernizr 中
默认总是按照资源列表(你所提供的文件列表顺序)顺序执行
可处理资源回退(fallback),且仍优先并行下载依赖的脚本,看下代码更容易理解:

yepnope([
 {
  load: 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',
  complete: function () {
   if ( ! window.jQuery ) {
    yepnope( 'local/jquery.min.js' );
   }
  }
 },
 {
  load : 'jquery.plugin.js',
  complete: function () {
   jQuery(function () {
    jQuery( 'div' ).plugin();
   });
  }
 }
]);

而其他加载器则可能必须这样处理:

someLoader('http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js', function(){
 if ( ! window.jQuery ) {
  someLoader( 'local/jquery.min.js', 'jquery.plugin.js' );
 /*注意这点和yepnope的区别,yepnope加载失败后仅需重新加载备用资源即可,不会影响依赖此资源的其他文件执行*/
 } else {
  someLoader( 'jquery.plugin.js' );
 }
});

yepnope的不足

并不总是最快的,像labjs等优化后可能加载速度优于yepnope,但需要根据你的实际情况考虑使用哪个加载器
需要给资源设置一定的缓存头(这一点很重要)
并不像RequireJS等类库有自己的生成工具及丰富的API,yepnope仅实现了基本加载器功能
默认总是按照你提供的资源列表顺序执行,这一点有可能会影响速度

yepnope使用实例:

直接传入字符串

yepnope( '/url/to/your/script.js' );

传入一个Object对象

yepnope( {
   load : '/url/to/your/script.js'
   } );

回调函数实例(回调函数中url表示加载的资源文件名;result表示test参数的结果;key表示使用 key maping 时候的文件名缩写)

yepnope( {
  test : window.JSON,
  load : '/url/to/your/script.js',
  callback : function ( url, result, key ) {
   // whenever this runs, your script has just executed.
   alert( 'script.js has loaded!' );
  }
 } );

complete函数实例

yepnope( {
  test : window.JSON,
  nope : 'json2.js',
  complete : function () {
   var data = window.JSON.parse( '{ "json" : "string" }' );
  }
 } );

Key maping实例

yepnope( {
  test : Modernizr.geolocation,
  yep : {
   'rstyles' : 'regular-styles.css'
  },
  nope : {
   'mstyles' : 'modified-styles.css',
   'geopoly' : 'geolocation-polyfill.js'
  },
  callback : function ( url, result, key ) {
   if ( key === 'geopoly' ) {
    alert( 'This is the geolocation polyfill!' );
   }
  }
 } );

当然回调函数你还可以这样写:

yepnope( {
  test : Modernizr.geolocation,
  yep : {
   'rstyles' : 'regular-styles.css'
  },
  nope : {
   'mstyles' : 'modified-styles.css',
   'geopoly' : 'geolocation-polyfill.js'
  },
  callback : {
   'rstyles' : function ( url, result, key ) {
    alert( 'This is the regular styles!' );
   },
   'mstyles' : function ( url, result, key ) {
    alert( 'This is the modified styles!' );
   },
   'geopoly' : function ( url, result, key ) {
    alert( 'This is the geolocation polyfill!' );
   }
  },
  complete : function () {
   alert( 'Everything has loaded in this test object!' );
  }
 } );

yepnope官方提供的3个Prefixes

css! Prefix:可以加载任何后缀的文件作为css文件

yepnope( 'css!mystyles.php?version=1532' );

preload! Prefix:预加载资源到缓存中,但不执行(下次load时候才执行)

yepnope( {
 load : 'preload!jquery.1.5.0.js',
 callback : function ( url, result, key ) {
  window.jQuery; //undefined
  yepnope(jquery.1.5.0.js);
  window.jQuery; //object
 }
} );

ie! Prefix(es):判断是否IE浏览器(除ie!外,还支持 ie5, ie6, ie7, ie8, ie9, iegt5, iegt6, iegt7, iegt8, ielt7, ielt8, 及 ielt9这几种Prefix)

yepnope({
 load: ['normal.js', 'ie6!ie7!ie-patch.js'] // ie6 or ie7 only (on patch)
});
Javascript 相关文章推荐
jquery 实现的全选和反选
Apr 15 Javascript
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
Javascript 函数中的参数使用分析
Mar 27 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
JQuery入门基础小实例(1)
Sep 17 Javascript
JavaScript设计模式初探
Jan 07 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
Sep 08 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 jQuery
javaScript实现滚动条事件详解
Mar 24 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 Javascript
js的延迟执行问题分析
Jun 23 #Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 #Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
Jun 23 #Javascript
js自定义鼠标右键的实现原理及源码
Jun 23 #Javascript
js代码实现的加入收藏效果并兼容主流浏览器
Jun 23 #Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 #Javascript
jquery的attr方法禁用表单元素禁用输入内容
Jun 23 #Javascript
You might like
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python fileinput模块使用介绍
2014/11/30 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
python 多线程中join()的作用
2020/10/29 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
校园之声广播稿
2014/01/31 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
商场租赁意向书
2014/07/30 职场文书
室内趣味活动方案
2014/08/24 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
销售员岗位职责范本
2015/04/11 职场文书
2016年中秋祝酒词
2015/11/26 职场文书