定义:前端
分类ajax
使用场景算法
表单验证数组
代理模式分析缓存
不能滥用模式 有时候仅仅是给代码增长了复杂度了安全
源码实现app
// 图片懒加载 --- 短暂的占位图片
// 会缓存到本地 等图片加载成功再去加载原有的图片
// 请求过来 本地缓存 占位
div{
display: inline-block;
border: 1px solid black;
}
div.img{
width: 100px;
}
<div id="demo"></div>
<button id="oBtn"></button>
function MyImage(_id) {
var oImg = document.createElement('img');
this.setSrc = function(_src) {
oImg.src = _src;
}
document.getElementById(_id).appendChild(oImg);
}
var ProxyImage = (function() {
var oImg = new Image();
var oMyImage = new MyImage('demo');
oImg.onload = function() {
setTimeout(function() {
oMyImage.setSrc(oImg.src);
}, 2000);
}
return function(occupySrc, src) {
oImg.src = src;
oMyImage.setSrc(occupySrc);
}
})();
复制代码
// 虚拟代理的思想延迟到它真正去改变的时候才去改变
#show{
width: 100px;
height: 100px;
border: 1px solid black;
}
<div id="show">haha</div>
<button type="bg">add greenBg</button>
<button type="cl">add blueColor</button>
<button type="fs">add fontSize</button>
<button type="fw">add fontWeight</button>
<button type="op">add opacity</button>
var oDiv = document.getElementById('show');
var oButtonArray = document.getElementsByTagName('button');
var ProxyRequest = function(func) {
var cache = [];
var timer = null;
return function() {
cache.push(this.getAttribute('type'));
clearTimeout(timer);
timer = setTimeout(function() {
func(oDiv, cache);
cache = [];
}, 2000);
}
};
var realChangeStyle = ProxyRequest(changeStyle);
for(var i = 0; i < oButtonArray.length; i++) {
oButtonArray[i].onclick = realChangeStyle;
}
// 改变样式
function changeStyle(dom, typeArr) {
var typeObj = {
bg: ['backgroundColor', 'green'],
cl: ['color', 'blue'],
fs: ['fontSize', '24px'],
fw: ['fontWeight', 'bold'],
op: ['opacity', '0.3']
}
if(typeArr.constructor == Array) { // 数组
typeArr.forEach(function(ele) {
dom.style[typeObj[ele][0]] = typeObj[ele][1];
})
}else { // 万一是字符串
dom.style[typeObj[typeArr][0]] = typeObj[typeArr][1];
}
}
复制代码