决心从java后台转做前端有些日子了,不断关注前端知识。从学习了nodejs的 require按需加载模块的思路之后感觉js的世界变得好美好啊,前几天无意看到了seajs,国内大牛的作品,专为前端js模块化而设计,项目地址。遂学习了一把,并且把该项目examples的第一个例子做成了一个jQuery的插件,分享如下:

1.项目目录

HelloSeaJS                                项目目录

--app                         存放html文件目录

             --game.html 

--sea-modules            seajs的模块目录,也是各种第三方插件目录

        --sea

        --jquery

--static                        本地js,css资源文件目录

        --application

2.具体代码

HelloSeaJS/app/game.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SeaJS</title>
</head>
<body>
<div id="container"></div>
<script type="text/javascript" src="../sea-modules/seajs/seajs/2.1.1/sea.js"></script> <!-- 引入seajs-->
<script type="text/javascript">
// Set configuration
seajs.config({
base: "../sea-modules/", //配置seajs模块路径
alias: {
"jquery": "jquery/jquery/1.10.1/jquery.js", //引入jquery
"loverotate": "jquery/loverotate/loverotate.js" //引入自定义插件
}
}); seajs.use("../static/application/game"); //引入js脚本
</script>
</body>
</html>

HelloSeaJS/static/application/game.js

define(function(require,exports,module){     //seajs的模块写法,具体参看seajs的api
var $ = require('jquery'); //加载jquery模块,这里对应的名字是html页面里配置好了的名字
var loverotate = require('loverotate'); //这里也是html里配置好了的 var container = $('#container'); container.loverotate({ //插件使用
content: 'I LOVE YOU!' //配置显示的字符
});
});

HelloSeaJS/sea-modules/jquery/loverotate/loverotate.js

(function($){
$.fn.loverotate = function(options) {
var opts = $.extend({}, $.fn.loverotate.defaults, options);
var o = $.meta ? $.extend({}, opts, $this.data()) : opts; var data = [];
var $this = $(this);
$this.css({
width: 'inherit',
height: 'auto'
});
var ul = $('<ul></ul>').css({
margin: '0px',
padding: '0px'
});
for(var i = 0, len = o.content.length; i < len; i++) {
var degree = degree360();
data.push(degree);
var li = $("<li></li>").css({
width: o.liWidth,
backgroundColor : o.liBackgroundColor,
textAlign: o.liTextAlign,
color: o.liColor,
lineHeight: o.liLineHeight,
fontSize: o.liFontSize,
cursor: o.liCursor,
position: o.liPosition,
opacity: o.liOpacity,
transform: 'rotate('+degree+'deg)',
top: randomNum(15)+'px',
margin: o.liMargin,
listStyle: 'none',
float: 'left',
'-webkit-transition-duration': o.liDuration, //设置动画时间
'-moz-transition-duration': o.liDuration,
'-o-transition-duration': o.liDuration,
'transition-duration': o.liDuration,
}).html(o.content.substring(i, i+1) == ' ' ? ' ': o.content.substring(i, i+1))
.hover(function() {
$(this).fadeTo(250, 1)
.css({'transform': 'rotate(0deg)',
'opacity': '1'});
}, function() {
var lithis = $(this);
setTimeout(function() {
lithis.css({'transform': 'rotate('+degree360()+'deg)',
'opacity': '0.5'});
}, randomNum(10000));
}); ul.append(li);
} return $this.append(ul);
}; var debug = function($obj) {
if(window.console && window.console.log) {
window.console.log('count: ' + $obj.size());
}
}; var numberType = ['-', '+']; var degree360 = function() { //得到一个-360到+360的数
return numberType[Math.floor(Math.random() * 2)] + Math.floor(Math.random() * 360);
} var randomNum = function(x) { //返回一个x以内的随机数
return Math.floor(Math.random() * x); //floor向下取整
// return Math.parseInt(Math.random() * x); //parseInt取整,丢弃小数部分
// return Math.ceil(Math.random() * x); //ceil向上取整
// return Math.round(Math.random() * x); //round四舍五入
}; $.fn.loverotate.defaults = { //li的默认值
content: 'I LOVE YOU!',
liWidth: '45px',
liBackgroundColor: '#C0E6DC',
liTextAlign: 'center',
liColor: '#999999',
liLineHeight: '40px',
liFontSize: '40px',
liCursor: 'pointer',
liPosition: 'relative',
liOpacity: 0.5,
liMargin: '0px 3px',
liDuration: '0.8s'
};
})(jQuery);

自定义的jQuery插件,今天也是照着样子学着写的,不足之处欢迎指正。由于有使用css3的动画效果,所以有些低版本的浏览器是达不到效果的,大家可以自己去发挥了。

这里有一篇详细介绍jQuery插件的写法,感觉思路比较清晰。

3.效果

初始时

完成时

前端模块化之seajs的更多相关文章

  1. 前端模块化开发之seaJs

    了解后端语言的童鞋一定听过模块化开发的概念,比如java.python等后端语言都有自己的模块化特性,然而和后端语言相比,javascript还尚未实现模块化的功能,虽然之后的更高版本可能引入模块化开 ...

  2. Angular JS - 8 - SeaJS与前端模块化

    一.前端模块化 关于前端模块化,参考以下链接 : https://github.com/seajs/seajs/issues/547 http://www.cnblogs.com/huiguo/cat ...

  3. 我的前端之旅--SeaJs基础和spm编译工具运用[图文]

    标签:seajs   nodejs   npm   spm   js 1. 概述 本文章来源于本人在项目的实际应用中写下的记录.因初期在安装和使用Seajs和SPM的时候,有点不知所措的经历.为此,我 ...

  4. JAVAScript:前端模块化开发

    目录 一:前端模块化概要 1.1.模块化概要 1.2.函数封装 1.3.对象封装 1.4.立即执行函数表达式(IIFE) 1.5.模块化规范 1.5.1.CommonJS 1.5.2.AMD((Asy ...

  5. 回顾:前端模块化和AMD、CMD规范(全)

    先列举下一些著名言论: "我想定义一个 each 方法遍历对象,但页头的 util.js 里已经定义了一个,我的只能叫 eachObject 了,好无奈." "Requi ...

  6. JavaScript学习总结(六)——前端模块化开发

    早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非常迫切. 前端模块化规范如下: 一.前端模 ...

  7. 前端模块化方案全解(CommonJS/AMD/CMD/ES6)

    模块化的开发方式可以提高代码复用率,方便进行代码的管理.通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数.目前流行的js模块化规范有CommonJS.AMD.CMD以及ES6的模块 ...

  8. [整理]前端模块化开发AMD CMD

    前端模块化开发的价值 AMD (中文版) CMD 模块定义规范 标准构建 http://seajs.org http://chaoskeh.com/blog/why-seajs.html http:/ ...

  9. 模块化之seaJs学习和使用

    使用seaJs也有一阵子了,一直也想抽个时间写个这方面的博客,直到今天才写……也许写的不是很完善,但跟大伙分享也是一种乐趣,不对之处欢迎指出.[抱拳] 时间有限,我这里不过多介绍前端模块化,有兴趣可以 ...

随机推荐

  1. 整理了一份React-Native学习指南

    原文:  http://www.w3ctech.com/topic/909 自己在学习React-Native过程中整理的一份学习指南,包含 教程.开源app和资源网站等,还在不断更新中.欢迎pull ...

  2. 转:Web网站性能测试分析及调优实例

    1.背景 前段时间,性能测试团队经历了一个规模较大的门户网站的性能优化工作,该网站的开发和合作涉及多个组织和部门,而且网站的重要性不言而喻,同时上线时间非常紧迫,关注度也很高,所以对于整个团队的压力也 ...

  3. SpringMVC 基于注解的Controller @RequestMapping @RequestParam..

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  4. [妙味Ajax]第二课:实例:留言板、瀑布流

    知识点总结 瀑布流原理(固定布局) 总宽度大小固定 每列宽度固定,比如LI,高度自动计算,每列使用float:left来布局 计算最短的一列,将Div插到最短的一列处(li里面包div)(getSho ...

  5. HDU 4247 A Famous ICPC Team

    Problem Description Mr. B, Mr. G, Mr. M and their coach Professor S are planning their way to Warsaw ...

  6. CSS3秘笈复习:第七章

    1.边距冲突: 当元素的bottom margin碰到另一个元素的top margin可能会产生一些怪异的计算,浏览器会忽略小的那个值而使用大的值. 2.边距折叠: 假设要在警告框里插入一个标题,并且 ...

  7. hive UDF添加方式

    hive UDF添加的方式 1.添加临时函数,只能在此会话中生效,退出hive自动失效 hive> add jar /home/jtdata/hiveUDF/out0.jar; Added [/ ...

  8. git上传代码到github

    git上传代码到github [root@bigdata-hadoop- ~]# git init [root@bigdata-hadoop- ~]# git add zeppelin [root@b ...

  9. Excel教程(3) - 函数输入方法

    对 Excel 公式而言,函数是其中的主要组成部分,因此公 式输入可以归结为函数输入的问题. "插入函数"对话框 "插入函数"对话框是 Excel 输入公式的重 ...

  10. HTML URL编码参考(转载)

    URL编码(URL encoding)的作用是将字符转化为可在因特网上安全传输的格式.URL——统一资源定位符Web浏览器通过URL从Web服务器上请求页面.URL就是网页的地址,如:http://w ...