前端之家收集整理的这篇文章主要介绍了
RequireJS简易绘图程序开发,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
前言
RequireJS的出现让前端代码模块化变得容易,当前端项目越来越大,代码越来越多的时候,模块化代码让项目结构更清晰,不仅在开发时让我们的思路更清晰,而且后期维护起来也更容易。下面是我学习RequireJS后使用RequireJS开发的一款简易绘图程序,运行在浏览器中如下图所示:
如果你对RequireJS还不是很了解,可以看我的RequireJS学习笔记:
开始
这个简易绘图程序的项目结构如下图所示:
其中index.html是项目的主页,js目录下存放所有js文件,js/app目录为我们自定义的模块文件,js/lib目录中暂时没有文件,当我们的项目里用到一些其他前端框架如jquery等时,js/lib目录就存放这些框架的js文件,js/main.js为requirejs的配置文件,主要是配置一些路径,js/require.min.js是RequireJS框架的文件。下面请跟我一步一步完成这个简易的绘图程序吧!
一、配置requirejs
本项目的配置文件代码放在js/main.js中,代码内容如下:
主要就是配置了项目根目录为'js/lib',然后配置了一个名为'app'的路径,路径为'../app',即'js/app'目录。
二、编写模块代码
这个项目中的模块主要有如下几个:point.js,line.js,rect.js,arc.js,utils.js,下面一一说明:
point.js:
point.js这个模块代表一个点(x,y),代码如下:
上面的代码中使用define定义了点这个模块,在回调函数中返回了一个类,该类有两个参数x,y,还有一个equals方法用于比较两个点是否相等。
要使用这个模块,我们可以使用如下代码:
<div class="jb51code">
<pre class="brush:js;">
require(['app/point'],function(Point) {
//新建一个点类的对象
var point = new Point(3,5);
})
直线模块的定义跟点模块的定义类似,都是在define的回调函数中返回一个类,这个直线类的构造方法中有两个点类的参数,代表直线的起点和终点,直线类还有一个drawMe方法,通过传入一个context对象,将自身画出来。
其中startPoint代表圆形所在的矩形的左上角的点的坐标,radius代表圆的半径,drawMe方法是画圆的方法。
在以上几个模块中,直线类、矩形类、圆形类都包含有drawMe()方法,这里涉及到了canvas绘图的知识,如果有不太清楚的,可以查一下文档:HTML 5 Canvas 参考手册
function drawLine(context,line) {
line.drawMe(context);
}
function drawRect(context,rect) {
rect.drawMe(context);
}
function drawArc(context,arc) {
arc.drawMe(context);
}
/* 添加一条绘制轨迹 /
function addHistory(item) {
history.push(item);
}
/* 画出历史轨迹 /
function drawHistory(context) {
for(var i = 0; i < history.length; i++) {
var obj = history[i];
obj.drawMe(context);
}
}
/* 清除历史轨迹 /
function clearHistory() {
history = [];
}
return {
drawLine: drawLine,drawRect: drawRect,drawArc: drawArc,addHistory: addHistory,drawHistory: drawHistory,clearHistory: clearHistory
};
})
上面已经将本次简易绘图程序的模块都定义完了,在绘制图形时用到的也就是上面几个模块,下面要开始编写主界面的代码了,主界面里包含四个按钮,还有一块大的画布用于绘图,下面直接上index.html文件的代码: