大学毕业之前去国外网站逛的时候无意中看到一个老外用jquery写了一个模拟win7的jquery ui界面,特效还好而且非常多,用的是jquery.easing.1.3.js,但是功能稀少,性能一般,还有可控操作接口没有,只有简单的桌面,桌面图标,窗口,任务栏,开始菜单而已,代码就1000来行。
大学毕业一年多点了,如今需要一个可操作性的后台或者前台用也可,重新来编写和扩展功能需求,接口,完善这一任务,一年前做了一部分扩展,由于刚加入工作打点的事情多,就暂时搁置了,原地址:http://www.oschina.net/code/snippet_153403_9696。现在由于学了node.js,看了不少javascript开发,代码质量有所精进,对原来的设计做了很大调整:包括图片合并到一张图,代码封装,增加模块扩展以方便对需求扩展开发等等。
功能描述
平台:
1.设计div+css布局,分块,嵌套,区域布局各自为政方式布局 [已完成]
2.代码设计,命名空间WebPlatform,目前核心代码编写有Platform,AeroWindow,Desktop,DesktopIcon,DesktopBar[已完成]
3.对象暴露设计,可根据设计自定义ID来方便直接操作对象[已完成]
4.插件扩展功能,分为prototype扩展和静态扩展,例如 [已完成]
主扩展方式1:
平台主方法Platform,如对该方法添加扩展Platform.fx.[方法名] = function(){var self = this},其中this可以访问当前的所有对象内容,Platform属于平台顶级方法,可以逐级按照需要往下访问。
扩展方式2:在对象上扩展
var platform = new Platform();
platform.extend({
A:function(){},
B:'newAttribute'
});
桌面:
1. 创建单独对象动态添加多桌面 [已完成]
2.桌面切换 [已完成]
3.增加了桌面切换助手 [已完成]
桌面图标:
1.可拖动 [已完成]
2.创建图标是预加载窗口 [已完成]
3.创建桌面图标不创建窗口 [已完成]
4.拖动防止重叠并规则摆放,动态创建图标,修改图标信息,删除图标信息 [未完成]
任务栏:
1.多桌面共享一个任务栏 [已完成]
2.点击任务栏图标,跳至任务桌面并还原窗口 [已完成]
3.关闭窗口,隐藏任务栏图标 [已完成]
4.任务栏分左右两个区域控制 [已完成]
5.任务栏上下拖动并变换样式[已完成]
窗口:复杂多变
1.分类创建窗口,html,iframe,dialog [对话框未整理]
2.新增加工具栏,状态栏,header的控制 [已完成]
3.窗口的最大化,最小化,关闭,最大化拖拽变成正常窗口状态,鼠标拖窗口到浏览器窗口上边时缘释放最大化 [已完成]
4.丰富的对话框窗口,ajax html,两个窗口之间相互控制内容显示(留出操作接口),wabpage内容窗口,自定义窗口,完全自定义窗口 [待完善]
新增右键菜单,不同区域右键菜单控制不一
新增配置文件及其保存功能,对每个桌面的操作保存,下次打开和最后一次状态一样。保存至mongodb
2013-12-26:完成窗口于桌面图标之间的各种协调工作,感觉功能越来越多,代码就越来越繁琐,代码的质量肯定有所下降了,先实现功能吧
窗口与桌面图标之间的关系:
1.图标创建和预加载:①加载图标同时预加载窗口信息,可以同时配置图标和窗口信息,②只添加图标到桌面
2.桌面图标:①双击图标,如果窗口没有预加载则创建新窗口,②如果窗口存在则打开,③添加了一个桌面图标双击后回调事件,这个非常有用,比如打开窗口链接服务器,首先检查登录,没有登录显示登录html,登录成功显示信息,使用before,after处理顺序等等。
3.窗口加载:①只加载窗口不创建图标,②加载窗口并创建桌面图标
开发扩展
代码使用javascript的链来对操作界面使用树形控制开发:控制情况,我这里使用json描述
{
top:{
desktop1:{
desktopicons:{},
aerowindows:{},
contextmenu:{}
},desktop2:{}}
}
一个系统下有多个桌面,每个桌面有自己的icons,windows,contextmenu等,top = new WebPlatform(……);desktop =new plat.addDesktop(……);