手机版

学习JS面向对象成果 国庆发布最新作品与大家交流

时间:2021-10-26 来源:互联网 编辑:宝哥软件园 浏览:

首先介绍jQuery的一个小问题。jQuery在设置透明度方面存在问题。首先看它的Code:代码复制代码如下://ie使用滤镜进行不透明度if(!jquery . support . opacity name==' opacity '){ if(set){//IE没有布局就不透明//通过设置缩放级别elem.zoom=1强制;//设置alpha滤镜设置不透明度elem.filter=(elem.filter || ' ')。替换(/alpha\([^)]*\)/' ')(parsent(值)' '=='NaN '?“:”alpha(不透明度=“值* 100”));}返回elem.filter elem.filter.indexOf('不透明度=')=0?(parsefloat(elem.filter.match(/opacity=([^)]*)/)[1))/100)“”:“”;}正常情况下,使用filter设置透明度是没有问题的,但是如果我们的元素已经有了filter呢?假设如下:filter : alpha imageloader(src=' http 3360 . ');jQuery代码执行后,自然会变成这样:filter : alpha imageloader(src=' http 3360 . ');Alpha(不透明度=80)注意我们有一个分号?这样,alpha就变成了一个CSS规则,而不是filter的一部分。解决办法也很简单。在jQuery源代码中,分号可以再次用空格替换,但这也说明了一个问题。jQuery不是一个基于非常好的架构的库,它的可替代性和可扩展性几乎是不可能的。对于这样一个小问题,除了修改源代码,我想不出任何来自外界的修改方案。如果是原型框架,直接替换setOpacity函数就可以了。所以如果jQuery发现是IE,可以调用另一个函数,而不是继续内联当前函数中的逻辑,我们的修改会方便很多。以下是修改后的代码。修改后的代码复制如下://ie使用滤镜不透明度if(!jquery . support . opacity name==' opacity '){ if(set){//IE没有布局就不透明//通过设置缩放级别elem.zoom=1强制;//设置alpha滤镜设置不透明度elem.filter=(elem.filter || ' ')。替换(/alpha\([^)]*\)/' ')。替换(';',' ')(parseInt(value ) ''=='NaN '?“:”alpha(不透明度=“值* 100”););}返回elem.filter elem.filter.indexOf('不透明度=')=0?(parsefloat(elem.filter.match(/opacity=([^)]*)/)[1))/100)“”:“”;}好了,我们来介绍一下新作品。最近,公司想让WEB系统看起来像一个桌面。这确实是一个疯狂的想法,但在我看来,它既令人兴奋又有趣。这是我可以做的,但同时做又不容易。作为一个努力朝着优秀方向前进的程序员,只有不断遇到这种挑战,才能慢慢成长。所以经过四天的设计开发,终于有了一个相对稳定的版本,之所以叫0.8版本,是因为它的功能还没有达到最初的计划(这次决定采用简单的版本管理,也就是小数点后除了0以外的所有版本都是beta版本,直到1.0、2.0等才叫稳定的正式版本。).我觉得这个框架的效果从截图上看不出来,所以上传的压缩包里面有一个Demo.htm页面,感兴趣的朋友可以自己下载试试。

总体思路把WEB做成桌面形式从一开始就是一个挑战,这个挑战的乐趣已经远远超过了考察它是否合理的理由.由于桌面的复杂性,需要用面向对象的思想来构造,而面向对象思想中最重要的是职责明确。在这个思想的指导下,上图所示的框架图就推导出来了,首先是所有控件的基类Control。只提供生命周期管理,即render和dispose,事件管理,即bind、unbind和trigger在Control的继承系统中使用类似ASP.NET的模型,render和dispose方法本身不提供重写(就像Page类的ProcessRequest方法不允许你随意重写一样)。相反,在适当的生命周期节点打开事件进行重写,这包括四个基本事件:呈现、呈现、处置和处置,所有后续控件都通过重写这四个方法来完成它们的功能。然后任务栏代表任务栏,任务栏图标代表任务栏上的图标,没什么好说的。任务栏只负责从容器的角度管理所有的任务图标,而任务图标则负责具体展示GroupTaskIcon。其实它的内部维护是一系列TitledTaskIcon,以一种“组合”的方式。组任务图标不需要为要在窗口部分显示的每个窗口重新制定HTML。最初的设置是不同的窗口类有不同的加载内容的方法,比如:RemoteWindow从远程位置加载内容,ElementWindow从特定的HTML元素加载内容。然而,它不得不面对一个问题。Window同时承载了行为、表达式和容器的功能,因此n种行为和m种表达式将生成n*m个子类,极大地提高了控制系统的复杂度,如tabremotewindow、tabelementvindow gorupremotewall和groupelementvindow。显然,这四类之间重复太多,不利于代码的复用,也不利于用户的选择。在这样的考虑下,我分离了Window的“呈现”部分,组建了Renderer,负责在Window中呈现内容,这样一系列的Renderer和一系列的Window都可以用来开发。用组合代替继承也是面向对象的一个主要原则。具体的实现细节和进一步的结构设计我不太清楚。请允许我下次通过我的博客具体说明,版本计划目前是发布0.8版本,实际上已经包含了0.9版本的一些功能。我将在0.9版本中实现以下内容:1。添加计时器类以执行计时计划;2.添加行为库以分离窗口的行为;3.形成常数库,用于获取复杂字符串;4.美化任务栏和组任务栏图标5。添加ExUI。覆盖以提供掩模层;0.9版本将于10月5日完成。作为毕业后送给我第一个生日的礼物,下面的1.0版本将是一个稳定的版本,同时提供以下改进:1。添加DOM库,生成DOM元素;2.桌面支持ViewPort控制所有元素的位置,以适应窗口大小的变化;3.DockWindow可以在桌面的四边收缩。鼠标移动到空区间(类似QQ) 1.0时自动出现现在1.0版本的发布时间还不确定,因为我已经看到了未来半年的长期加班寿命.下载包中包含了Demo.htm演示页面,所有需要使用的JS文件都在Script文件夹下,其中除了jquery和JS 2之外都属于这个框架。Style文件夹下的Core.css是这个框架的核心css文件。doc文件夹下框架的DOCument是由jsdoc工具包生成的。因为本来是为公司做的DEMO,但是涉及到公司的业务数据,不能直接拿出演示页面,所以这里的Images文件夹有些混乱。请原谅我,http://xiazai.jb51.net/200910/yuanma/ExUI.rar,并询问尝试给我一个意见的朋友,这个框架是否值得继续发展,或者走开源之路是否还有一点希望。工作快半年了,也希望能有真正能拿到的作品。

版权声明:学习JS面向对象成果 国庆发布最新作品与大家交流是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。