热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS创建多个窗口的OOP版

初学JS的面向对象,所以也不清楚自己写的代码符不符合标准的面向对象写法,还请各位狠狠地批!点击可查看Demo这个练习是YQ经过《初学JavaScript的面向对象》学习后,对《JavaScript模仿桌面窗口》进行的面向对...SyntaxHighlighter.all();

 

\

 

初学JS的面向对象,所以也不清楚自己写的代码符不符合标准的面向对象写法,还请各位狠狠地批! 点击可查看Demo 这个练习是YQ经过《初学Javascript的面向对象》学习后,对《Javascript模仿桌面窗口》进行的面向对象改版。

 

 

这次模仿窗口练习,增加的功能主要有新建多个窗口(数量由浏览器宽度决定)和模仿桌面的面板,基本上除了一些细节外,和桌面的窗口比较相似了,而且也做了点美化。在IE6下能够实现所有功能,知识视觉效果不怎样。

 

代码太多就不贴了(自学js以来写得最多的一次),主要是展示一下构造方法和原型函数:

 

01

//构造方法

02

 function Window(windowID, width, height) {}

03

 

04

/*------------原型方法:初始化---------------------------*/

05

 Window.prototype.initialize = function() {}

06

 

07

/*------------原型方法:创建HTML内容& 获得窗口各部件的对象---------------*/

08

 Window.prototype.createWindow = function() {}

09

 

10

/*------------原型方法:显示新建好的窗口-------------------*/

11

 Window.prototype.showWindow = function() {}

12

 

13

/*------------原型方法:窗体拖放函数----------------------*/

14

 Window.prototype.drag = function(objItself) {}

15

 

16

/*------------原型方法:八个方向改变窗体大小----------------*/

17

 Window.prototype.changeSize = function(objItself) {}

18

 

19

/*------------原型方法:改变按钮、窗口列表的样式-------------*/

20

 Window.prototype.changeStyle = function(objItself) {}

从上述代码可见,通过面向对象写法,可以将一个对象的属性和方法分开、归类,YQ在写这段代码的时候能感觉到比写面向过程时轻松,修改也容易多了。代码缩起来看还是挺清晰明了的,虽然方法里面的代码依旧粗糙(个人感觉改进了不少了,但是还是对自己不够满意。) 以下是这次练习的笔记:

 

1、使用事件冒泡 这次练习总结了上次模仿窗口的一些BUG,例如点击按钮拖动也会导致窗口拖动,这是由于事件冒泡,对于YQ懂了原理,但确不清楚解决办法,只好请教google大神了,然后就偶遇了这段代码:

 

01

//阻止事件冒泡

02

function stopBubble(event) {

03

    var event = event || window.event;

04

    //判断浏览器的类型,在基于ie内核的浏览器中的使用cancelBubble

05

    if (window.event) {

06

        event.cancelBubble = true;

07

    } else {

08

        //在基于firefox内核的浏览器中支持做法stopPropagation

09

        event.preventDefault();

10

        event.stopPropagation();

11

    }

12

}

2、优化了getElementsByTagName()和getElementById() YQ没用过JQuery,但是知道$()是用来提取id或tagName的元素对象,所以自己就山寨了一个。

01

/*

02

**$(idOrTagName, "body"), 取body 中的tagName 标签

03

**$(idOrTagName, parentID), 取parentID 中的tagName 标签

04

**$(idOrTagName), 取id 名为idOrTagName 的节点

05

*/

06

function $(idOrTagName, parentID) {

07

    if(parentID == "body")

08

        return document.getElementsByTagName(idOrTagName);

09

    else if(parentID)

10

        return document.getElementById(parentID).getElementsByTagName(idOrTagName);

11

    else

12

        return document.getElementById(idOrTagName);

13

}

14

function create(tagName) {

15

    return document.createElement(tagName);

16

}

3、优化了myGetElementsByClassName() YQ在使用以前写的myGetElementsByClassName()方法时,发现有些地方还不够完善,比如没有提供严格匹配和松散匹配两种模式。所以进行了改进。另外,parentID = "body"这个其实可以不写也能达到效果,但是在实际应用中,YQ发现有时会将参数的个数弄乱,所以就统一了参数的个数。

01

/*

02

**bool,true:严格匹配,false:松散匹配

03

**className, class名

04

**tagName, 标签名字

05

**parentID, 搜索的范围,即父节点。(若在整个页面搜索,填"body")

06

*/

07

function myGetElementsByClassName(bool, className, tagName, parentID){

08

    var tagArray = $(tagName, parentID);

09

    var resultArray = new Array();

10

    for (var i = 0; i

11

        if(bool) {

12

            if(tagArray[i].className == className) {

13

                resultArray.push(tagArray[i]);

14

            }

15

        } else {

16

            if(tagArray[i].className.indexOf(className) != -1) {

17

                resultArray.push(tagArray[i]);

18

            }

19

        }

20

    }

21

    return resultArray;

22

}

4、一时想不到写什么好YQ获益最深的是面向对象的写法,但是一时之间又想不到获益了什么,目前虽然手放上键盘就能敲出一段面向对象的JS(标不标准就不清楚了……),但是却道不出个所以然,明显是没有理论知识为底蕴,腹中空空,自然是哑口无言了……#(┬_┬)

 

通过这次练习,YQ发现自己1、CSS掌握不熟悉,虽然YQ觉得自己最拿得出手的是CSS,但和网上的大牛、各个前端人员相比,简直是小巫见大巫,所以接下来一点时间,YQ将会对CSS进行进阶学习(有资格说进阶吗(?A?)……),加强CSS2,进军CSS3。2、最近一直在围着JavaScript转,但只是肤浅的敲代码做练习,对Javascript的各种基础却没有掌握透彻,所以YQ暂时缓一下JS的实践练习,回归犀牛书,打好基础。九层之塔,起于累土。3、程序员要珍重身体,最近熬夜,上火体弱……(T Д T)……实在不该,学习和锻炼应该两不误!只有好体质才有高质量的代码!

摘自:YQ君的博客


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了解决IE678伪类不兼容问题的方法,包括少用CSS3和HTML5独有的属性,使用CSS hacker,使用last-child清除浮动、批量添加标签、去掉list item最后一个的border-right等技巧。同时还介绍了使用after清除浮动时加上IE独有属性zoom:1的处理方法。另外,本文还提到可以使用jQuery代替批量添加标签的功能,以及使用负边距和CSS2选择器element+element去掉list item最后一个的border-right的方法。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
  • 本文介绍了使用jQuery实现图片预加载和等比例缩放的方法,同时提供了演示和相关代码。该方法可以重置图片的宽度和高度,并使图片在水平和垂直方向上居中显示。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法
    本文介绍了获取ul中第一个li元素的五种方法和多个ul中第一个li元素的四种方法,包括使用jQuery的选择器和遍历方法。通过这些方法,可以方便地获取到所需的元素,并进行相应的操作。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
author-avatar
yeyeye
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有