http://cyj.me/why-seajs/zh/
http://seajs.org/docs/#quick-start
1.一个demo
html文件中
<script src="../sea-modules/seajs/seajs/2.2.0/sea.js"></script>
<script>
// Set configuration
seajs.config({
base: "../sea-modules/",
alias: {
"jquery": "jquery/jquery/1.10.1/jquery.js"
}
});
// For development
if (location.href.indexOf("?dev") > 0) {
seajs.use("../static/hello/src/main");
}
// For production
else {
seajs.use("examples/hello/1.0.0/main");
}
</script>
入口文件main
define(function(require) {
var Spinning = require('./spinning');
var s = new Spinning('#container');
s.render();
});
模块代码
define(function(require, exports, module) {
var $ = require('jquery');
function Spinning(container) {
this.container = $(container);
this.icons = this.container.children();
this.spinnings = [];
}
module.exports = Spinning;
Spinning.prototype.render = function() {
this._init();
this.container.css('background', 'none');
this.icons.show();
this._spin();
}
Spinning.prototype._init = function() {
var spinnings = this.spinnings;
$(this.icons).each(function(n) {
var startDeg = random(360);
var node = $(this);
var timer;
node.css({
top: random(40),
left: n * 50 + random(10),
zIndex: 1000
}).hover(
function() {
node.fadeTo(250, 1)
.css('zIndex', 1001)
.css('transform', 'rotate(0deg)');
},
function() {
node.fadeTo(250, .6).css('zIndex', 1000);
timer && clearTimeout(timer);
timer = setTimeout(spin, Math.ceil(random(10000)));
}
);
function spin() {
node.css('transform', 'rotate(' + startDeg + 'deg)');
}
spinnings[n] = spin;
})
return this;
}
Spinning.prototype._spin = function() {
$(this.spinnings).each(function(i, fn) {
setTimeout(fn, Math.ceil(random(3000)));
});
return this;
}
function random(x) { return Math.random() * x };
});
2.知识点
define define(id?, deps?, factory)
define
也可以接受两个以上参数。字符串 id
表示模块标识,数组 deps
是模块依赖。比如:
define('hello', ['jquery'], function(require, exports, module) { // 模块代码});
require.async require.async(id, callback?)
require.async方法用来在模块内部异步加载模块,并在加载完成后执行指定回调。callback
参数可选。
define(function(require, exports, module) { // 异步加载一个模块,在加载完成时,执行回调
require.async('./b', function(b) { b.doSomething(); }); // 异步加载多个模块,在加载完成时,执行回调
require.async(['./c', './d'], function(c, d) {
c.doSomething();
d.doSomething();
});
});
// // 并发加载模块 a 和模块 b,并在都加载完成时,执行指定回调
seajs.use(['./a', './b'], function(a, b) { a.init(); b.init();});
callback参数可选,省略时,表示无需回调。
seajs.config({
// 别名配置
alias: {
'es5-safe': 'gallery/es5-safe/0.9.3/es5-safe',
'json': 'gallery/json/1.0.2/json',
'jquery': 'jquery/jquery/1.10.1/jquery'
},
// 路径配置
paths: {
'gallery': 'https://a.alipayobjects.com/gallery'
},
// 变量配置
vars: {
'locale': 'zh-cn'
},
// 映射配置
map: [
['http://example.com/js/app/', 'http://localhost/js/app/']
],
// 预加载项
preload: [
Function.prototype.bind ? '' : 'es5-safe',
this.JSON ? '' : 'json'
],
// 调试模式
debug: true,
// Sea.js 的基础路径
base: 'http://example.com/path/to/base/',
// 文件编码
charset: 'utf-8'
});