[阿当视频]WEB组件学习笔记
1. JS分层和组件的种类
浏览器底层包括
HTML CSS JS(DOM/BOM/Style/Canvas 2D/WebGl/SVG)
框架核心层解决的问题
JS核心语法层面薄弱(面象对象 包等)
JS原生API不好用(cookie ajax)
浏览器兼容问题
框架:Prototype YUI Dojo jQuery等
框架组件层又分为:框架通用组件和定制组件
原生浏览器只提供了一些简单的控件:input text checkbox radio select
没有提供:日历选择器、富文本编辑等
组件分为:框架组件、定制组件(前两者第三方提供)和独立组件(没有任何依赖,中间没有框架核心层直接就是原生JS,开发过程中发现重用模块并抽象出来的组件
应用层
具体项目需求
2. CSS命名空间
1)全名前加前缀,没有副作用,轻巧性价比高
2)把所有的CSS挂在一个类中,用子孙选择器的缺点
- 复用困难,跨团队困难
- 样式和HTML结构偶和
- 权重
3. 引入require.js
<script src="scripts/require.js" data-main="scripts/main.js" ></script>
4. 弹窗组件
简单版(有确定和关闭按钮) —>定制长宽和位置 —>调整接口格式—>定制标题—>定制关闭按钮—>定制皮肤—>定制按钮文案—>模态—>拖动
以下是代码
require.config({
paths:{
jquery:'jquery-3.1.0.min',
jqueryUI:'http://code.jquery.com/ui/1.12.0/jquery-ui.min'
}
})
define(['jquery','jqueryUI','Window'],function($,$UI,w){
$('input').click(function(){
new w.Window().alert({
title : '友情提示',
content : '自定义内容',
width : 300,
height : 150,
y : 50,
hasCloseBtn : true,
hasMask : true,
isDraggable : true,
dragHandle : '.window_header',
skinClassName : 'window-skin-a',
textBtn : 'OK',
handlerBtn : function(){
console.log('you click the button')
},
closeBtn : function(){
console.log('you click the close button')
}
});
})
})
main.js
define(['jquery','jqueryUI'],function($,$UI){
function Window(){
this.cfg = {
width : 500,
height : 300,
title : '',
content : '',
hasCloseBtn : false,
hasMask : false,
isDraggable : false,
skinClassName : null,
textBtn : '确定',
handlerBtn : null,
closeBtn : null,
dragHandle : null
}
}
Window.prototype = {
alert : function(cfg){
var CFG = $.extend(this.cfg,cfg),
boundingBox = $(
'<div id="window_boundingBox">'+
'<div class="window_header">'+ CFG.title +'</div>'+
'<div class="window_body">'+ CFG.content +'</div>'+
'<div class="window_footer"><input type="button" value="'+ CFG.textBtn +'" class="btn" /></div>'+
'</div>'
),
btn = boundingBox.find('.window_footer input'),
mask = $('<div class="mask"></div>'),
closeBtn = $('<div class="close">X</div>');
if(CFG.hasCloseBtn){
closeBtn.appendTo(boundingBox);
closeBtn.click(function(){
CFG.closeBtn && CFG.closeBtn();
boundingBox.remove();
mask && mask.remove();
})
}
if(CFG.skinClassName){
boundingBox.addClass(CFG.skinClassName);
}
if(CFG.hasMask){
mask.appendTo('body');
mask.click(function(){
boundingBox.remove();
mask && mask.remove();
})
}
if(CFG.isDraggable){
if(CFG.dragHandle){
boundingBox.draggable({handle:CFG.dragHandle});
} else{
boundingBox.draggable();
}
}
boundingBox.appendTo('body');
btn.appendTo(boundingBox);
btn.click(function(){
CFG.handlerBtn && CFG.handlerBtn();
boundingBox.remove();
mask && mask.remove();
})
boundingBox.css({
width : this.cfg.width + 'px',
height : this.cfg.height + 'px',
left : (this.cfg.x || (window.innerWidth - this.cfg.width)/2 ) + 'px',
top : (this.cfg.y || (window.innerHeight - this.cfg.height)/2 ) + 'px'
})
},
confirm : function(){
},
prompt : function(){
}
}
return {
Window : Window
}
})
window.js
*{
padding:;
margin:;
}
body{
height: 100%;
}
#window_boundingBox{
width: 300px;
height: 150px;
border:1px solid #666;
position: absolute;
left: 50%;
top: 20%;
background: white;
}
.window_header{
background: #999;
font-size: 16px;
padding:0 10px;
height: 30px;
line-height: 30px;
}
.window_body{
padding: 10px;
}
.btn{
position: absolute;
left:;
text-align: center;
bottom: 10px;
left: 50%;
width: 50px;
text-align: center;
margin-left: -25px;
}
.close{
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #666;
right:;
top:;
position: absolute;
color: white;
}
.mask{
background: rgba(0,0,0,0.5);
position: absolute;
left:;
top:;
width: 100%;
height: 100%;
}
/*换肤*/
.window-skin-a .window_header{
background: #ccc;
}
.window-skin-a .close{
background: #999;
}
css
5. 自定义事件
本质:观察者模式
优点:跳出原生事件的限制,提高封装的抽象层级
6. 连缀语法
和jQ中的链式操作写法一样,组件的方法中return this,main.js中new出的构造函数后以点的方式进行连缀
7. 自定义组件
Widget抽象类:和UI相关的类型组件
申明Widget模块,window.js中继承widget类,通过$.extend()方法进行混合,接收多个字典对象,对象也是一个字典
Widget类设计统一生命周期
一个属性,两个方法,四个交给子组件的接口
this.boudigBox = null //属性:最外层容器
destroy //方法:销毁组件
render //方法:渲染组件
renderUI //接口:添加dom节点
bindUI //接口:监听事件
synUI //接口:初始化组件属性
destructor //接口:销毁前的处理函数
另外还讲了confirm,prompt,common方法:通用窗体,四种类型的弹窗已完,可自己再进行进阶:组件的MVC。
贴出视频链接:阿当大话西游之WEB组件
[阿当视频]WEB组件学习笔记的更多相关文章
- 【前端】Web前端学习笔记【2】
[2016.02.22至今]的学习笔记. 相关博客: Web前端学习笔记[1] 1. this在 JavaScript 中主要有以下五种使用场景 在全局函数调用中,this 绑定全局对象,浏览器环境全 ...
- Web前端学习笔记(001)
....编号 ........类别 ............条目 ................明细....................时间 一.Web前端学习笔记 ...
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- 【前端】Web前端学习笔记【1】
... [2015.12.02-2016.02.22]期间的学习笔记. 相关博客: Web前端学习笔记[2] 1. JS中的: (1)continue 语句 (带有或不带标签引用)只能用在循环中. ( ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- Web Service学习笔记:动态调用WebService
原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我 ...
- web前端学习笔记
web前端学习笔记(CSS盒子的定位) 相对定位 使用相对定位的盒子的位置常以标准流的排版方式为基础,然后使盒子相对于它在原本的标准位置偏移指定的距离.相对定位的盒子仍在标准流中,它后面的盒子仍以标准 ...
随机推荐
- Redis几个认识误区
前几天微博发生了一起大的系统故障,很多技术的朋友都比较关心,其中的原因不会超出James Hamilton在On Designing and Deploying Internet-Scale Serv ...
- 读写分离子系统 - C# SQL分发子系统(ADO.NET,不支持EF)
读写分离子系统 - C# SQL分发子系统(ADO.NET,不支持EF) 这次介绍的这个框架只适用于中小项目,并且各个读写数据库结构是一致的情况,还要并且是写入数据库只有1台情况. 我们来看看这个子系 ...
- Android自定义组合控件内子控件无法显示问题
今天自定义了一个组合控件,与到了个奇葩问题: 我自定义了一个RelativeLayout,这个layout内有多个子控件.但奇怪的是这些子控件一直显示不出来.调试了一下午,竟然是因为在获取(infla ...
- 构建一个真实的应用电子商务SportsStore(十)
构建一个真实的应用电子商务SportsStore(十) 我们现在还需要为管理员提供一个途径,使他能方便的管理网站的商品目录,这也是所有网站都需要的功能,常用到了几乎所有开发人员都要开发这种功能的地步, ...
- Microsoft2013校园招聘笔试题
Microsoft2013校园招聘笔试题 继续求拍砖!!!! 1. You are managing the database of a book publichser, you currently ...
- 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题
如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹 ...
- POJ 3900 The Robbery
大意:和背包的问题相似,第 i 个箱子有 i 颗钻石.钻石的重量,价值给出.然后再M的重量下背尽量多价值的钻石. 思路:直接暴搜然后剪枝.因为数据范围的原因无法用DP. #include <cs ...
- [每日一题] OCP1z0-047 :2013-07-16 主键与唯一索引
主键包括非空和唯一约束,它会自动创建唯一索引(注:唯一约束也会自动创建唯一索引),测试如下: 1. 创建一个表products gyj@OCM> Create table products( 2 ...
- 小C的树(Treap节点删除)[70/100]
用Treap暴力模拟,调常数~ 好了,接下来说一下Treap中的删除操作 Step 1:先找到这个结点. Step 2:如果它的儿子≤1,用它儿子替它 否则 把之后做根节点的儿子旋转到根 回到Step ...
- Python学习--10 面向对象编程
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 本节对于面向对象的概念不做 ...