requirejs跟seajs差不多都属于模块管理插件,简单来说就是将页面上的众多加载js的文件综合整理,让首页只加载一条js文件,让页面代码看起来简洁。
直接放例子:
以下是常规的做法:
JS:
<script src="js/jquery-1.8.3.min.js"></script> <script src="js/velocity.min.js"></script> <script src="js/velocity.ui.js"></script> <script> $(function(){ $.Velocity.RegisterUI("callout.zidingyi", { defaultDuration: 3000, calls: [ [ { rotateZ: 1080 }, 0.50 ], [ { scaleX: 0.5 }, 0.25, { easing: "spring" } ], [ { scaleX: 1 }, 0.25, { easing: "spring" } ] ] }); $('.c').velocity('callout.zidingyi'); }); </script>
HTML:
<div class="c">1</div> <div class="c">2</div> <div class="c">3</div>
如果遇到大项目的时候JS文件加载更多,而且还要考虑JS加载的依赖顺序。
以下是引用requirejs修改后的代码:
JS:
<script data-main="js/main" src="js/require.js"></script>
对首页就只加载一条JS文件即可。
重点是要介绍main.js文件,如下:
require.config({ shim: { velocity:['jquery'], //要加载velocity先加载jquery,以下类同 velocityui: ['velocity'], jshome:['velocityui'], }, paths: { jquery: 'jquery-1.8.3.min', //jquery是jquery-1.8.3.min的别名以下类同 velocity:'velocity.min', jshome:'1', //这里的1.js就是自己要写的逻辑代码 velocityui : 'velocity.ui', } }); require(['jshome']); //在shim上设置依赖加载顺,所以这里加载jshome会按顺序加载jquery>velocity>velocityui>jshome 以后需要哪些依赖的模块只需要引入别名即可,也要保持顺序,例如要依赖jquery和velocity.min: require(['jquery','velocity'],function(){ //这里就引入了2个依赖文件 // 这里写自己需要的代码 });
Require.js中使用jQuery 插件
虽然jQuery的支持AMD的API, 这并不意味着jQuery插件也是和AMD兼容的。
(function ($) { $.fn.myPlugin = function () { //你自己的插件代码 }; })(jQuery);
不过我们稍微修改一下就可以使用Require.js加载一个jQuery插件:
;(function (factory) { if (typeof define === "function" && define.amd) { // AMD模式 define([ "jquery" ], factory); } else { // 全局模式 factory(jQuery); } }(function ($) { $.fn.jqueryPlugin = function () { //插件代码 }; }));
Require.js中使用jQuery UI组件
Require.js中使用jQuery UI组件也类似的,只要改造一下jQuery Widget Factory 代码就可以了,并且感觉jQuery UI的依赖关系加载就可以了。例如:
(function (widgetFactory) { if (typeof define === "function" && define.amd) { // AMD模式 define("jquery.ui.widget", ["jquery"], function () { widgetFactory(window.jQuery); }); } else { // 全局模式 widgetFactory(window.jQuery); } } (function ($, undefined) { // jQuery Widget Factory 代码 }));