定義:前端
分類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];
}
}
複製代碼