why.xingtongworld.com项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2000 lines
122 KiB

/*--------------------------拉伸,截图.HTML5的压缩,剪图的处理核心部份--------------------*/
window.ShearPhoto = function() {
this.transform = this.DomMoveEve = this.DomUpEve = this.MoveDivEve = this.zoomEve = this.eveMold = false;
this.DivDownEVe = {};
this.transformFun();
!this.addevent && window.addEventListener ? (this.addevent = "add", this.selectionempty = function() {
window.getSelection().removeAllRanges();
}) :(this.addevent = "att", this.selectionempty = function() {
document.selection.empty();
});
this.MyAjax = new window.ShearPhoto.MyAjax();
};
window.ShearPhoto.prototype = {
transformFun:function() {
var Imgstyle = document.body.style, arr = new Array("MsTransform", "MozTransform", "WebkitTransform", "WebkitTransform", "OTransform", "transform");
for (var i = 0; i < arr.length; i++) {
if (arr[i] in Imgstyle) {
this.transform = arr[i];
break;
}
}
},
HTML5:{
Reg:new RegExp("translate3d\\((.*?)\\)", "i"),
HTML5LT:function(Transform) {
if (Transform) {
this.getLT = function(dom) {
domstyleTransform = this.Reg.exec(dom.style[Transform]);
if (domstyleTransform) {
return domstyleTransform[1].split(",", 2);
} else {
return [ 0, 0 ];
}
};
this.setLT = function(dom, L, T) {
var domstyle = dom.style, RegTrue = true, domstyleTransform = domstyle[Transform], txt = "translate3d(" + L + "," + T + ",0)", str = domstyleTransform.replace(this.Reg, function(a) {
RegTrue = false;
return txt;
});
domstyle[Transform] = RegTrue ? domstyleTransform + " " + txt :str;
};
this.setL = function(dom, L) {
var domstyle = dom.style, RegTrue = true, domstyleTransform = domstyle[Transform], str = domstyleTransform.replace(this.Reg, function(a, b) {
RegTrue = false;
var T = b.split(",", 2)[1];
return "translate3d(" + L + "," + T + ",0)";
});
domstyle[Transform] = RegTrue ? domstyleTransform + " " + "translate3d(" + L + ",0,0)" :str;
};
this.setT = function(dom, T) {
var domstyle = dom.style, RegTrue = true, domstyleTransform = domstyle[Transform], str = domstyleTransform.replace(this.Reg, function(a, b) {
RegTrue = false;
var L = b.split(",", 2)[0];
return "translate3d(" + L + "," + T + ",0)";
});
domstyle[Transform] = RegTrue ? domstyleTransform + " " + "translate3d(0," + T + ",0)" :str;
};
} else {
this.getLT = function(dom) {
var domstyle = dom.style;
return [ domstyle.left || 0, domstyle.top || 0 ];
};
this.setLT = function(dom, L, T) {
var domstyle = dom.style;
domstyle.left = L, domstyle.top = T;
};
this.setL = function(dom, L) {
dom.style.left = L;
};
this.setT = function(dom, T) {
dom.style.top = T;
};
}
},
URL:window.URL || window.webkitURL || window.mozURL || window.msURL || false,
canvas:false,
Images:false,
ImagesType:"image/jpeg",
HTML5PHP:false,
HTML5MAX:false,
HandleRotation:function(this_, MyR, SendArry, newcanvas, ctx, p, W, H) {
var ImgH = this_.ImgOHeight, ImgW = this_.ImgOWidth, ImgRW, ImgRH, ImgslateX, ImgslateY, MyRR, imgData, arrIMGWH = [ Math.ceil(ImgW * p), Math.ceil(ImgH * p) ];
switch (MyR) {
case 90:
ImgRW = arrIMGWH[1];
ImgRH = arrIMGWH[0];
ImgslateX = 0;
ImgslateY = ImgRH;
break;
case 180:
ImgRW = arrIMGWH[0];
ImgRH = arrIMGWH[1];
ImgslateX = ImgRW;
ImgslateY = ImgRH;
break;
case 270:
ImgRW = arrIMGWH[1];
ImgRH = arrIMGWH[0];
ImgslateX = ImgRW;
ImgslateY = 0;
break;
}
newcanvas.width = ImgRW;
newcanvas.height = ImgRH;
ctx.translate(ImgslateX, ImgslateY);
ctx.rotate((360 - MyR) * Math.PI / 180);
ctx.drawImage(this_.arg.ImgMain, 0, 0, ImgW, ImgH, 0, 0, arrIMGWH[0], arrIMGWH[1]);
imgData = ctx.getImageData(0, 0, ImgRW, ImgRH);
ctx.clearRect(0, 0, arrIMGWH[0], arrIMGWH[1]);
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, arrIMGWH[0], arrIMGWH[1]);
newcanvas.width = SendArry.IW = W;
newcanvas.height = SendArry.IH = H;
ctx.putImageData(imgData, -SendArry.X * p, -SendArry.Y * p);
delete imgData;
},
zipImg:function(DataUrl, maxs, type, functions) {
var Image64 = new Image(), this_ = this;
Image64.onload = function() {
var newcanvas = document.createElement("canvas");
newcanvas.style.display = "none";
var bodys = document.body;
bodys.appendChild(newcanvas);
var ctx = newcanvas.getContext("2d"), width = this.width, height = this.height;
if (maxs) {
var P = width / height;
if (width > maxs[0]) {
width = maxs[0];
height = Math.round(maxs[0] / P);
}
if (height > maxs[0]) {
height = maxs[0];
width = Math.round(maxs[0] * P);
if (width > maxs[0]) {
width = maxs[0];
height = Math.round(maxs[0] / P);
}
}
}
newcanvas.width = width;
newcanvas.height = height;
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, width, height);
ctx.drawImage(Image64, 0, 0, this.width, this.height, 0, 0, width, height);
var DATA64 = newcanvas.toDataURL(type, maxs ? maxs[1] :.85);
if (this_.URL) {
this_.BOLBID && this_.URL.revokeObjectURL(this_.BOLBID);
this_.BOLBID = this_.URL.createObjectURL(this_.FormBlob(DATA64));
typeof functions === "function" && functions(this_.BOLBID);
} else {
typeof functions === "function" && functions(DATA64);
}
ctx.clearRect(0, 0, width, height);
bodys.removeChild(newcanvas);
delete DATA64;
delete Image64;
};
Image64.src = DataUrl;
delete DataUrl;
},
CtxDrawImage:function(ctx, SendArry, newcanvas, this_) {
var MyR = SendArry.R, arg = this_.arg;
if (this.HTML5MAX) {
var W = SendArry.IW, WW = W, H = SendArry.IH, p = W / H;
W > this.HTML5MAX ? (W = this.HTML5MAX, H = Math.round(W / p), H > this.HTML5MAX && (H = this.HTML5MAX,
W = Math.round(H * p))) :H > this.HTML5MAX && (H = this.HTML5MAX, W = Math.round(H * p),
W > this.HTML5MAX && (W = this.HTML5MAX, H = Math.round(W / p)));
p = W / WW;
if (MyR === 0) {
var twx = this_.ImgOWidth - SendArry.X, twy = this_.ImgOHeight - SendArry.Y, IMGWx = twx * p, IMGHy = twy * p;
newcanvas.width = SendArry.IW = W;
newcanvas.height = SendArry.IH = H;
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, IMGWx, IMGHy);
ctx.drawImage(arg.ImgMain, SendArry.X, SendArry.Y, twx, twy, 0, 0, IMGWx, IMGHy);
} else {
this.HandleRotation(this_, MyR, SendArry, newcanvas, ctx, p, W, H);
}
} else {
if (MyR === 0) {
newcanvas.width = SendArry.IW;
newcanvas.height = SendArry.IH;
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, SendArry.IW, SendArry.IH);
ctx.drawImage(arg.ImgMain, -SendArry.X, -SendArry.Y);
} else {
this.HandleRotation(this_, MyR, SendArry, newcanvas, ctx, 1, SendArry.IW, SendArry.IH);
}
}
},
lock:false,
PhotoHTML5True:false,
SetSrc:function(newsrc, ImgMain, ImgDom, domimg) {
ImgMain.src = ImgDom.src = newsrc;
for (var i = 0; i < domimg[1]; i++) {
domimg[0][i].src = newsrc;
}
delete newsrc;
},
BOLBID:false,
Aclick:false,
artwork:false,
EffectsReturn:function() {
this.Aclick && (this.Aclick.className = "");
this.Aclick = this.artwork;
this.artwork && (this.artwork.className = "Aclick");
},
Effects:function(StrEvent, HTML5) {
var ImgMain = this.arg.ImgMain, ImgDom = this.arg.ImgDom, AP;
var preview = this.preview;
var this_ = this;
return function() {
if (HTML5.lock) return;
if (HTML5.Aclick === this) {
this_.pointhandle(1500, 1, "亲!现在已经是" + StrEvent + "效果了!", 2, "#307ff6", "#fff");
return;
}
HTML5.lock = true;
AP = window.ShearPhoto.psLib(HTML5.Images);
HTML5.Aclick && (HTML5.Aclick.className = "");
HTML5.Aclick = this;
this.className = "Aclick";
this_.pointhandle(0, 1, "正在加载" + StrEvent + "效果!稍等....,不要动鼠标,可能有点卡", 2, "#fbeb61", "#3a414c", function() {
setTimeout(function() {
var domimg = preview.domimg, DATA64;
if (StrEvent === "原图") {
DATA64 = AP.save(false, HTML5.ImagesType);
} else {
DATA64 = AP.ps(StrEvent).save(false, HTML5.ImagesType);
}
if (HTML5.URL) {
HTML5.BOLBID && HTML5.URL.revokeObjectURL(HTML5.BOLBID);
HTML5.BOLBID = HTML5.URL.createObjectURL(HTML5.FormBlob(DATA64));
HTML5.SetSrc(HTML5.BOLBID, ImgMain, ImgDom, domimg);
this_.runImgUrl = [ HTML5.BOLBID, true, true ];
} else {
HTML5.SetSrc(DATA64, ImgMain, ImgDom, domimg);
this_.runImgUrl = [ DATA64, true, true ];
}
delete DATA64;
this_.pointhandle(1500, 1, StrEvent + "效果加载成功!提示:如果机器配置差,效果加载时间会更长哦", 1, "#307ff6", "#fff");
HTML5.lock = false;
HTML5.PhotoHTML5True = true;
}, 1);
});
};
},
BlobRegExp:new RegExp("^data:.*base64,"),
FormBlob:function(dataURI) {
var byteString, splits = false, splits1 = dataURI.replace(this.BlobRegExp, function() {
splits = true;
return "";
});
if (splits) byteString = atob(splits1); else byteString = unescape(splits1);
var byteStringlength = byteString.length, ia = new Uint8Array(byteStringlength);
for (var i = 0; i < byteStringlength; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ ia ], {
type:this.ImagesType
});
},
IfHTML5:function(transform, H5True, HTML5MAX) {
try {
new Blob([ "1" ], {
type:"text/plain"
});
} catch (e) {
H5True = false;
}
transform && H5True && (this.canvas = true, this.HTML5MAX = HTML5MAX);
},
CanvasImg:function(SendArry, postArgs, this_) {
var newcanvas = document.createElement("canvas"), bodys = document.body;
newcanvas.style.display = "none";
bodys.appendChild(newcanvas);
var ctx = newcanvas.getContext("2d");
this.CtxDrawImage(ctx, SendArry, newcanvas, this_);
var blob = this.FormBlob(newcanvas.toDataURL(this.ImagesType, this_.arg.HTML5Quality));
ctx.clearRect(0, 0, SendArry.IW, SendArry.IH);
bodys.removeChild(newcanvas);
var readerForm = new FormData();
readerForm.append("ShearPhotoIW", SendArry.IW);
readerForm.append("ShearPhotoIH", SendArry.IH);
readerForm.append("ShearPhotoFW", SendArry.FW);
readerForm.append("ShearPhotoFH", SendArry.FH);
readerForm.append("ShearPhotoP", this_.arg.proportional[0]);
if (Object.prototype.toString.call(postArgs) === "[object Object]") {
for (var key in postArgs) {
readerForm.append(key, postArgs[key]);
}
}
readerForm.append("UpFile", blob);
return readerForm;
}
},
_ieexchange_:function() {
var this_ = this;
function e(a, b) {
var exchange = new Array(this_[a], this_[b]);
this_[a] = exchange[1];
this_[b] = exchange[0];
}
e("ImgWidth", "ImgHeight");
},
SetRote:{
ROReg:new RegExp("rotate\\((.*?)\\)", "i"),
SLReg:new RegExp("translate\\((.*?)\\)", "i"),
run:function(DOM, Transform, RO, SL) {
var domstyle = DOM.style, RegTrue = true, domstyleTransform = domstyle[Transform], ROstr = domstyleTransform.replace(this.ROReg, function() {
RegTrue = false;
return RO;
}), txt = RegTrue ? domstyleTransform + " " + RO :ROstr, RegTrue = true, SLstr = txt.replace(this.SLReg, function() {
RegTrue = false;
return SL;
}), txt = RegTrue ? txt + " " + SL :SLstr;
return txt;
},
runSL:function(DOM, Transform, SL) {
var domstyle = DOM.style, RegTrue = true, domstyleTransform = domstyle[Transform], SLstr = domstyleTransform.replace(this.SLReg, function() {
RegTrue = false;
return SL;
});
return RegTrue ? domstyleTransform + " " + SL :SLstr;
}
},
_exchange_:function() {
var this_ = this;
this._ieexchange_();
var IfRotate = this.rotate;
if (IfRotate === 90 || IfRotate === 270) {
var consts = {
90:-1,
270:1
}[IfRotate];
this.ImgRotateFun = function(W, H) {
var ImgRotateLT = consts * Math.round((H - W) * .5) + "px", arg = this.arg, str = "translate(" + ImgRotateLT + "," + ImgRotateLT + ")";
arg.ImgMain.style[this_.transform] = this_.SetRote.runSL(arg.ImgMain, this_.transform, str);
arg.ImgDom.style[this_.transform] = this_.SetRote.runSL(arg.ImgDom, this_.transform, str);
return [ H, W ];
};
return function(ImgMain, ImgDom, rotate) {
var slate = consts * Math.round((this_.ImgWidth - this_.ImgHeight) * .5), str = "translate(" + slate + "px," + slate + "px)";
ImgMain.style[this_.transform] = this_.SetRote.run(ImgMain, this_.transform, rotate, str);
ImgDom.style[this_.transform] = this_.SetRote.run(ImgDom, this_.transform, rotate, str);
return slate;
};
this.preview.WH = [ this_.ImgHeight, this_.ImgWidth ];
} else {
this.preview.WH = [ this_.ImgWidth, this_.ImgHeight ];
this.ImgRotateFun = function(W, H) {
return [ W, H ];
};
return function(ImgMain, ImgDom, rotate) {
ImgMain.style[this_.transform] = this_.SetRote.run(ImgMain, this_.transform, rotate, "translate(0,0)");
ImgDom.style[this_.transform] = this_.SetRote.run(ImgDom, this_.transform, rotate, "translate(0,0)");
return 0;
};
}
},
preview:{
isW:new Array(),
isH:new Array(),
run:function(arg, thisMain) {
var _this = this;
if (Object.prototype.toString.call(arg.preview) === "[object Array]") {
var leng = arg.preview.length, EmptyFun = function() {}, srcDefault = arg.relativeUrl + "images/default.gif";
if (leng > 0) {
arg.scope.parentNode.insertAdjacentHTML("afterEnd", '<div id="preview" style="display:none;margin-left:8px;"></div>');
var HTML = "", proportionFun = EmptyFun, p = false;
arg.proportional[0] ? p = arg.proportional[0] :proportionFun = function(d, w, i, pro) {
d[1][i].style.height = Math.round(w[i] / pro[0] * pro[1]) + "px";
};
var margin_right = 10, borderW = 5, MBall = margin_right + borderW * 2;
for (var i = 0; i < leng; i++) {
this.domWidth += arg.preview[i] + MBall;
HTML += '<a href="javascript:;" style="width:' + arg.preview[i] + "px;height:" + (p ? Math.round(arg.preview[i] / p) + "px;" :"auto;") + "margin-right:" + margin_right + "px;background-color: #F5F5F5;border: " + borderW + "px solid #F5F5F5;" + '"><img id="preview_img" src="' + srcDefault + '"/></a>';
}
this.dom = document.getElementById("preview");
this.dom.innerHTML = HTML;
this.dom.parentNode.style.width = arg.scopeWidth + 2 + "px";
var domimg = [ this.dom.getElementsByTagName("img"), this.dom.getElementsByTagName("a") ], imgUrlFun = function(d, u) {
d.src = u;
}, imgWHFun = function(d, WH, pro, i) {
var W = Math.round(WH[0] * pro), H = Math.round(WH[1] * pro), True = false;
_this.isW[i] === W || (d.style.width = W + "px", _this.isW[i] = W, True = true);
_this.isH[i] === H || (d.style.height = H + "px", _this.isH[i] = H, True = true);
if (True && thisMain.rotate > 10 && thisMain.rotate !== 180) {
var mylt = (_this.isW[i] - _this.isH[i]) / (thisMain.rotate === 270 ? -2 :2) + "px";
d.style[thisMain.transform] = thisMain.SetRote.runSL(d, thisMain.transform, "translate(" + mylt + "," + mylt + ")");
}
}, RFun = function(d, styleR, R, pro) {
if (thisMain.transform) {
var SL = R[1] * pro + "px";
d.style[styleR] = thisMain.SetRote.run(d, styleR, R[0], "translate(" + SL + "," + SL + ")");
} else {
d.style[styleR] = R;
}
}, funone, funtwo, funthree, domimgA = domimg[0], pro, leftBorder, topBorder, domimgi;
this.domimg = [ domimg[0], leng ], this.close_ = function() {
for (var i = 0; i < leng; i++) {
domimgi = domimgA[i];
domimgi.src = srcDefault;
if ("cssText" in domimgi.style) domimgi.style.cssText = ""; else domimgi.setAttribute("style", "");
}
this.dom.style.display = "none";
arg.Effects && (arg.Effects.style.display = "none");
this.dom.parentNode.style.width = arg.scopeWidth + 2 + "px";
};
this.SetPreview = function(p) {
if (p) {
for (var i = 0; i < leng; i++) domimg[1][i].style.height = Math.round(arg.preview[i] / p) + "px";
proportionFun = EmptyFun;
} else proportionFun = function(d, w, i, pro) {
d[1][i].style.height = Math.round(w[i] / pro[0] * pro[1]) + "px";
};
};
this.handle = function(argarr, True, TrueHTML5, args) {
True && this.open_(args || arg, TrueHTML5);
var left = argarr.left, top = argarr.top, formAllW = argarr.formAllW, imgUrl = argarr.imgUrl, TF = argarr.TF, styleR = argarr.styleR, R = argarr.R, formAllH = argarr.formAllH, HTML3D = argarr.HTML3D;
typeof imgUrl === "boolean" ? funone = EmptyFun :funone = imgUrlFun;
TF ? funtwo = imgWHFun :funtwo = EmptyFun;
typeof R === "boolean" ? funthree = EmptyFun :funthree = RFun;
typeof left === "boolean" ? left = EmptyFun :(leftBorder = left + arg.Border, topBorder = top + arg.Border,
left = function(pro) {
HTML3D.setLT(domimgi, Math.round(leftBorder * pro) + "px", Math.round(topBorder * pro) + "px");
});
for (var i = 0; i < leng; i++) {
domimgi = domimgA[i];
pro = arg.preview[i] / formAllW;
left(pro);
proportionFun(domimg, arg.preview, i, [ formAllW, formAllH ]);
funone(domimgi, imgUrl);
funtwo(domimgi, this.WH, pro, i);
funthree(domimgi, styleR, R, pro);
}
};
}
}
},
dom:false,
domWidth:0,
domimg:false,
WH:new Array(2),
parentNodes:false,
SetPreview:function() {},
EffTrue:false,
handle:function(argarr, True, arg) {
True && this.open_(arg);
},
close_:function() {
this.arg.Effects && (this.arg.Effects.style.display = "none");
this.parentNodes && (this.parentNodes.style.width = this.arg.scopeWidth + 2 + "px");
},
open_:function(arg) {
var efffwidth = 0;
this.arg = arg;
if (this.EffTrue) {
arg.Effects.style.display = "block";
arg.Effects.scrollTop = 0;
arg.Effects.style.height = arg.scopeHeight + "px";
this.parentNodes = arg.Effects.parentNode;
efffwidth = arg.Effects.offsetWidth;
} else {
arg.Effects && (arg.Effects.parentNode.removeChild(arg.Effects), arg.Effects = false);
}
if (this.dom) {
var this_ = this;
this.dom.style.display = "block";
this.dom.parentNode.style.width = arg.scopeWidth + this.domWidth + efffwidth + 10 + "px";
} else {
arg.Effects && (arg.Effects.parentNode.style.width = arg.scopeWidth + this.domWidth + efffwidth + 2 + "px");
}
}
},
Rotate:function(arg) {
var rotate;
this.saveL = this.formLeft + this.relatL;
this.saveT = this.formTop + this.relatT;
if (this.transform) {
arg === "left" ? this.rotate -= 90 :this.rotate += 90;
this.rotate = {
"-90":270,
0:0,
"-270":90,
360:0,
180:180,
90:90,
270:270,
"-360":0,
"-180":180
}[this.rotate] || 0;
rotate = "rotate(" + this.rotate + "deg)";
var fun = this._exchange_();
this.setinitial(this.arg, true);
var SL = fun(this.arg.ImgMain, this.arg.ImgDom, rotate);
this.preview.handle({
left:this.ImgDomL,
top:this.ImgDomT,
formAllW:this.formAllW,
formAllH:this.formAllH,
imgUrl:false,
styleR:this.transform,
R:[ rotate, SL ],
HTML3D:this.HTML5
});
} else {
arg === "left" ? this.rotate -= 1 :this.rotate += 1;
this.rotate = this.rotate > 3 ? 0 :this.rotate < 0 ? 3 :this.rotate;
if (this.rotate === 1 || this.rotate === 3) {
this.ImgRotateFun = function(W, H) {
return [ H, W ];
};
} else {
this.ImgRotateFun = function(W, H) {
return [ W, H ];
};
}
this.arg.ImgMain.style.filter = this.arg.ImgDom.style.filter = rotate = "progid:DXImageTransform.Microsoft.BasicImage(rotation=" + this.rotate + ")";
this._ieexchange_();
this.preview.handle({
left:false,
top:false,
formAllW:this.formAllW,
formAllH:this.formAllH,
imgUrl:false,
styleR:"filter",
R:rotate,
HTML3D:this.HTML5
});
this.setinitial(this.arg, true);
}
},
pointhandle:function(residencetime, speed, txt, Position, backgroundColor, color, functions) {
var point = this.arg.scope.children[0];
point.className === "point" && this.arg.scope.removeChild(point);
if (residencetime === -1) return;
point = document.createElement("div");
point.className = "point";
this.arg.scope.insertBefore(point, this.arg.scope.childNodes[0]);
var this_ = this, num = -35, HTML53D = this.HTML5;
function show(begin, end, speed, cmd) {
begin += cmd;
if (begin > end && 0 < cmd) {
HTML53D.setT(point, end + "px");
if (residencetime) {
setTimeout(function() {
show(end, num, speed, -1);
}, residencetime);
} else {
typeof functions === "function" && functions();
}
return;
} else {
if (end > begin && 0 > cmd) {
try {
this_.arg.scope.removeChild(point);
} catch (e) {}
return;
}
}
HTML53D.setT(point, begin + "px");
setTimeout(function() {
show(begin, end, speed, cmd);
}, speed);
}
point.style.color = color;
point.style.backgroundColor = backgroundColor;
point.innerHTML = "<i></i>" + txt;
var pointI = point.getElementsByTagName("i")[0];
switch (Position) {
case 0:
pointI.style.backgroundPosition = "-16px 0";
break;
case 1:
pointI.style.backgroundPosition = "0 0";
break;
case 2:
pointI.style.backgroundPosition = "-31px 0";
break;
}
show(num, 0, speed, 1);
},
setinitial:function(arg, TF) {
var cl = 0, ct = 0, TrueTraverse = !arg.traverse, HTML53D = this.HTML5, RL, BL, RT, BT;
if (this.BoxW > this.ImgWidth) {
this.relatW = this.ImgWidth;
arg.relat.style.width = this.ImgWidth + "px";
var BiW = Math.round((this.BoxW - this.ImgWidth) * .5);
RL = (this.relatL = BiW) + "px";
BL = -BiW + "px";
} else {
arg.relat.style.width = this.BoxW + "px";
this.relatW = this.BoxW;
RL = BL = this.relatL = 0;
TrueTraverse && (cl = (this.BoxW - this.ImgWidth) * .5);
}
if (this.BoxH > this.ImgHeight) {
this.relatH = this.ImgHeight;
arg.relat.style.height = this.ImgHeight + "px";
var BiH = Math.round((this.BoxH - this.ImgHeight) * .5);
this.relatT = BiH;
RT = BiH + "px";
BT = -BiH + "px";
} else {
this.relatH = this.BoxH;
arg.relat.style.height = this.BoxH + "px";
RT = BT = this.relatT = 0;
TrueTraverse && (ct = (this.BoxH - this.ImgHeight) * .5);
}
HTML53D.setLT(arg.relat, RL, RT);
HTML53D.setLT(arg.black, BL, BT);
this.AmendOffset();
this.MovePhoto(TF, cl, ct, TrueTraverse);
},
MovePhoto:function(TF, cl, ct, True) {
var arg = this.arg, ImgDom = arg.ImgDom, ImgMain = arg.ImgMain, also, scale, ImgMainL, ImgMainT, ImgDomL, ImgDomT, HTML3D = this.HTML5;
if (arg.traverse && this.BoxW < this.ImgWidth) {
var MinusImgWBoxW = this.ImgWidth - this.BoxW;
also = this.BoxW - this.formAllW;
scale = also && MinusImgWBoxW / also;
var L = Math.round(-this.formLeft * scale);
ImgMainL = L;
ImgDomL = L - this.formLeft - this.Border;
} else {
ImgMainL = cl = arg.traverse ? 0 :True ? cl :this.ImgMainL;
ImgDomL = cl - this.formLeft - this.Border;
}
if (arg.traverse && this.BoxH < this.ImgHeight) {
var MinusImgHBoxH = this.ImgHeight - this.BoxH;
also = this.BoxH - this.formAllH;
scale = also && MinusImgHBoxH / also;
var T = Math.round(-this.formTop * scale);
ImgMainT = T;
ImgDomT = T - this.formTop - this.Border;
} else {
ImgMainT = ct = arg.traverse ? 0 :True ? ct :this.ImgMainT;
ImgDomT = ct - this.formTop - this.Border;
}
this.ImgMainT = ImgMainT, this.ImgMainL = ImgMainL;
this.ImgDomL = ImgDomL, this.ImgDomT = ImgDomT;
HTML3D.setLT(ImgMain, ImgMainL + "px", ImgMainT + "px");
HTML3D.setLT(ImgDom, ImgDomL + "px", ImgDomT + "px");
this.preview.handle({
left:ImgDomL,
top:ImgDomT,
formAllW:this.formAllW,
formAllH:this.formAllH,
imgUrl:false,
TF:TF,
styleR:false,
R:false,
HTML3D:HTML3D
});
},
AmendOffset:function() {
var HTML53D = this.HTML5, LT3D;
if (this.saveL) {
this.formLeft = this.saveL - this.relatL;
this.formTop = this.saveT - this.relatT;
} else {
LT3D = HTML53D.getLT(this.formParent);
typeof this.formLeft === "boolean" && (this.formLeft = parseFloat(LT3D[0]));
typeof this.formTop === "boolean" && (this.formTop = parseFloat(LT3D[1]));
this.formLeft -= this.relatL;
this.formTop -= this.relatT;
}
this.formLeft < 0 && (this.formLeft = 0, this.saveL = this.relatL);
this.formTop < 0 && (this.formTop = 0, this.saveT = this.relatT);
var formWL = this.formLeft + this.formAllW, formHT = this.formTop + this.formAllH;
if (formWL > this.relatW) {
var FrL = formWL - this.relatW;
if (FrL > this.formLeft) {
this.formW = this.formW - (FrL - this.formLeft);
this.formLeft = 0;
this.saveL = this.relatL;
this.formAllW = this.formW + this.Mdouble;
} else {
this.formLeft -= FrL;
this.saveL = this.formLeft + this.relatL;
}
}
if (formHT > this.relatH) {
var FrT = formHT - this.relatH;
if (FrT > this.formTop) {
this.formH = this.formH - (FrT - this.formTop);
this.formTop = 0;
this.saveT = this.relatT;
this.formAllH = this.formH + this.Mdouble;
} else {
this.formTop -= FrT;
this.saveT = this.formTop + this.relatT;
}
}
HTML53D.setLT(this.formParent, this.formLeft + "px", this.formTop + "px");
if (this.arg.proportional[0]) {
var H = Math.round(this.formAllW / this.arg.proportional[0]);
if (H > this.formAllH) {
this.formAllW = Math.round(this.formAllH * this.arg.proportional[0]);
this.formW = this.formAllW - this.Mdouble;
} else {
this.formAllH = H;
this.formH = H - this.Mdouble;
}
}
this.arg.form.style.width = this.formW + "px", this.arg.form.style.height = this.formH + "px";
this.ie6(this.formParent, this.formAllW, this.formAllH);
},
MaxMinLimit:function(this_) {
this_.ImgWidth = this_.ImgOWidth = this.width;
this_.ImgHeight = this_.ImgOHeight = this.height;
if (typeof this_.arg.Max === "number") {
this_.ImgWidth > this_.arg.Max && (this_.ImgWidth = this_.arg.Max, this_.ImgHeight = Math.round(this_.ImgWidth / this_.ImgScales));
this_.ImgHeight > this_.arg.Max && (this_.ImgHeight = this_.arg.Max, this_.ImgWidth = Math.round(this_.ImgHeight * this_.ImgScales));
}
var MH, MW;
if (this_.arg.proportional[0]) {
MH = this_.Min;
MW = Math.round(MH * this_.arg.proportional[0]);
if (MW < this_.Min) {
MW = this_.Min;
MH = Math.round(MW / this_.arg.proportional[0]);
}
} else {
MW = MH = this_.Min;
}
this_.ImgWidth < MW && (this_.ImgWidth = MW, this_.ImgHeight = Math.round(this_.ImgWidth / this_.ImgScales));
this_.ImgHeight < MH && (this_.ImgHeight = MH, this_.ImgWidth = Math.round(this_.ImgHeight * this_.ImgScales));
this_.artworkW = this_.ImgWidth, this_.artworkH = this_.ImgHeight;
},
SetProportional:function(pro) {
if (pro != this.arg.proportional[0]) {
this.arg.proportional[0] = pro;
if (!this.runImgUrl) {
return;
}
var Type = this.HTML5.ImagesType, this_ = this, runImgUrl = this.runImgUrl;
this.preview.close_();
this.pointhandle(0, 1, "正在更换截框比例......", 2, "#fbeb61", "#3a414c", function() {
this_.again();
this_.run.apply(this_, runImgUrl);
this_.HTML5.ImagesType = Type;
this_.preview.SetPreview(pro);
});
}
},
run:function(ImgUrl, Trues, SetPro) {
this.runImgUrl = [ ImgUrl, Trues, true ];
this.HTML5.HTML5PHP = Trues;
var dir_=(ImgUrl.indexOf('file/photo/') > -1) ? this.arg.relativeUrl : this.arg.avatarUrl;
var this_ = this, arg = this.arg, relatImgUrl = this.HTML5.canvas && Trues ? ImgUrl : dir_ +"/" + ImgUrl, image = new Image();
SetPro || (this.HTML5.Images = image);
this.defaultShear();
this.arg = arg;
this.HTML5.canvas && Trues || (this.ImgUrl = ImgUrl);
image.onload = function() {
if (!(this.width = Math.round(this.width)) > 0 || !(this.height = Math.round(this.height)) > 0) {
this_.pointhandle(3e3, 10, "请选择正确图片", 0, "#f82373", "#fff");
return;
}
arg.ImgMain.src = arg.ImgDom.src = relatImgUrl;
arg.black.style.zIndex = 99;
this_.ImgScales = this.width / this.height;
this_.Min = arg.Min;
this_.MaxMinLimit.call(this, this_);
arg.ImgMain.style.width = arg.ImgDom.style.width = this_.artworkW + "px", arg.ImgMain.style.height = arg.ImgDom.style.height = this_.artworkH + "px";
this_.BoxW = arg.scope.offsetWidth - 2;
this_.BoxH = arg.scope.offsetHeight - 2;
this_.Border = arg.Border;
this_.Mdouble = arg.Border * 2;
var W, H;
if (arg.proportional[0]) {
W = arg.proportional[1] - this_.Mdouble;
H = arg.proportional[1] / arg.proportional[0] - this_.Mdouble;
} else {
W = arg.proportional[1] - this_.Mdouble;
H = arg.proportional[2] - this_.Mdouble;
}
this_.formW = W = Math.round(W);
this_.formH = H = Math.round(H);
this_.formAllW = W + this_.Mdouble;
this_.formAllH = H + this_.Mdouble;
this_.preview.WH = [ this_.artworkW, this_.artworkH ];
this_.formParent = arg.form.offsetParent;
this_.et();
this_.setinitial(arg);
this_.preview.handle({
left:false,
top:false,
formAllW:this_.formAllW,
formAllH:this_.formAllH,
TF:true,
imgUrl:relatImgUrl,
styleR:false,
R:false,
HTML3D:this_.HTML5
}, true, arg);
var str = this_.MoveDiv = new window.ShearPhoto.MoveDiv();
str.reckon(arg.relat, false);
str.selectionempty = this_.selectionempty;
str.addevent = this_.addevent;
str.HTML5 = this_.HTML5;
str.run({
to:new Array(arg.form),
form:this_.formParent,
MoveWidth:this_.relatW,
MoveHeight:this_.relatH,
shifting:new Array(),
center:1,
centerFront:function() {
return [ this_.relatW, this_.relatH ];
},
DivDownFun:function(t) {
t.arg.MoveWidth = this_.relatW;
t.arg.MoveHeight = this_.relatH;
t.DivW = this_.formW + this_.Mdouble;
t.DivH = this_.formH + this_.Mdouble;
},
centerfun:function(l, t, tt) {
this_.formLeft = l;
this_.formTop = t;
this_.MovePhoto(false, 0, 0);
tt.arg.MoveWidth = this_.relatW;
tt.arg.MoveHeight = this_.relatH;
tt.DivW = this_.formW + this_.Mdouble;
tt.DivH = this_.formH + this_.Mdouble;
},
zIndex:100,
MoveFun:function(iL, iT, MoveScale) {
this_.formLeft = iL;
this_.formTop = iT;
this_.MovePhoto(true, 0, 0);
}
});
this_.MoveDivEve = function() {
str.delDownEve();
};
arg.Shearbar.style.display = "block";
arg.SelectBox.style.visibility = "hidden";
this_.zoom();
this_.pointhandle(2e3, 10, "可以拖动或拉伸蓝边框进行截图", 1, "#fbeb61", "#3a414c");
delete relatImgUrl;
delete ImgUrl;
};
image.onerror = function() {
this_.pointhandle(0, 10, "无法读取图片。图片类型或路径不正确 或 relativeUrl参数是否存在问题", 0, "#f82373", "#fff");
};
this.pointhandle(0, 1, "图片已加载,正在创建截图环境,请稍等........", 2, "#fbeb61", "#3a414c", function() {
image.src = relatImgUrl;
});
},
config:function(arg) {
this.arg = arg;
arg.Shearbar.style.display = "none";
arg.scope.style.width = arg.black.style.width = arg.SelectBox.style.width = arg.scopeWidth + "px";
arg.scope.style.height = arg.black.style.height = arg.SelectBox.style.height = arg.scopeHeight + "px";
var scopeparentNode = arg.scope.parentNode;
scopeparentNode.style.width = scopeparentNode.parentNode.style.width = arg.scopeWidth + 2 + "px";
var opacityFun;
this.HTML5.IfHTML5(this.transform, arg.HTML5, arg.HTML5MAX);
this.HTML5.HTML5LT(arg.translate3d && this.transform);
if (this.transform) opacityFun = function(t, n) {
t.style.opacity = n;
}; else opacityFun = function(t, n) {
t.style.filter = "alpha(opacity=" + n * 100 + ")";
};
if (arg.Border > 0) {
arg.DynamicBorder[0].style.display = arg.DynamicBorder[1].style.display = arg.DynamicBorder[2].style.display = arg.DynamicBorder[3].style.display = "none";
arg.DynamicBorder[0].style.background = arg.DynamicBorder[1].style.background = arg.DynamicBorder[2].style.background = arg.DynamicBorder[3].style.background = "#FFF";
for (var a in arg.to) {
arg.to[a].style.border = "1px solid" + " " + arg.BorderColor;
arg.to[a].style.background = arg.BorderColor;
opacityFun(arg.to[a], 1);
}
arg.form.style.border = arg.Border + "px" + " " + arg.BorderStyle + " " + arg.BorderColor;
}
arg.black.style.background = arg.backgroundColor;
opacityFun(arg.black, arg.backgroundOpacity);
this.preview.run(arg, this);
arg.scope.ondragstart = function() {
return false;
};
if (navigator.userAgent.indexOf("MSIE 6.0") > 0 && arg.Border === 0) this.ie6 = function(a, b, c) {
a.style.height = arg.DynamicBorder[1].style.height = arg.DynamicBorder[2].style.height = c + "px";
a.style.width = b + "px";
}; else this.ie6 = function() {};
if (this.preview.EffTrue = arg.HTML5Effects && this.HTML5.canvas && arg.Effects) {
var EffectsA = arg.Effects.getElementsByTagName("a"), EffectsAi, EffectsAiclick = this.HTML5.Effects;
this.HTML5.artwork = this.HTML5.Aclick = EffectsA[0];
for (var i = 0; i < EffectsA.length; i++) {
EffectsAi = EffectsA[i];
EffectsAi.onclick = EffectsAiclick.call(this, EffectsAi.getAttribute("StrEvent"), this.HTML5);
}
}
this.pointhandle(3e3, 10, "请选择本地照片、相册,进行截取头像", 2, "#307ff6", "#fff");
},
zoom:function() {
var this_ = this, zoom = new window.ShearPhoto.MoveDiv();
zoom.reckon(this_.arg.ZoomDist, false);
zoom.selectionempty = this_.selectionempty;
zoom.addevent = this_.addevent;
zoom.HTML5 = this.HTML5;
var Draggable = this_.arg.ZoomBar, MH, MW, thePro;
function SetMHW(PRO) {
if (PRO) {
MH = this_.Min;
MW = Math.round(MH * PRO);
if (MW < this_.Min) {
MW = this_.Min;
MH = Math.round(MW / PRO);
}
} else {
MW = MH = this_.Min;
}
}
SetMHW(this_.arg.proportional[0]);
zoom.run({
to:[ Draggable ],
form:Draggable,
MoveWidth:zoom.ReckonWH.W,
MoveHeight:zoom.ReckonWH.H,
shifting:new Array(),
center:1,
zIndex:100,
DivDownFun:function() {
this_.saveL = this_.formLeft + this_.relatL;
this_.saveT = this_.formTop + this_.relatT;
},
cursor:"pointer",
MoveFun:function(L) {
var schedule;
if (L < bisect) schedule = Math.round(Zoomout * L + 10) / 100; else schedule = Math.round(L * magnify - 100) / 100;
var W = Math.round(this_.artworkW * schedule), H = Math.round(this_.artworkH * schedule);
W < MW && (W = MW, H = Math.round(W / this_.ImgScales));
H < MH && (H = MH, W = Math.round(H * this_.ImgScales));
var IMGWH = this_.ImgRotateFun(W, H);
this_.ImgWidth = IMGWH[0];
this_.ImgHeight = IMGWH[1];
this_.arg.ImgMain.style.width = this_.arg.ImgDom.style.width = W + "px";
this_.arg.ImgMain.style.height = this_.arg.ImgDom.style.height = H + "px";
this_.preview.WH = [ W, H ];
this_.setinitial(this_.arg, true);
}
});
this_.zoomEve = function() {
zoom.delDownEve();
};
var zoomMAx = zoom.ReckonWH.W - zoom.DivW, bisect = zoomMAx * .5, magnify = 200 / bisect, Zoomout = 90 / bisect;
},
PointerShape:function(Shape) {
this.arg.scope.style.cursor = this.arg.form.style.cursor = Shape;
},
DelPointerShape:function() {
this.arg.scope.style.cursor = "";
this.arg.form.style.cursor = "move";
},
ShearPhotoDown:function(obj, fun) {
this.addEvent(obj, "mousedown", fun);
this.addEvent(obj, "touchstart", fun);
},
delShearPhotoDown:function(obj, fun) {
this.delEvent(obj, "mousedown", fun);
this.delEvent(obj, "touchstart", fun);
},
et:function() {
for (var a in this.arg.to) {
if (this.addevent === "add") {
if (typeof this.DivDownEVe[a] !== "function") {
this.DivDownEVe[a] = this.DivDown(a);
} else {
this.delShearPhotoDown(this.arg.to[a], this.DivDownEVe[a]);
}
this.ShearPhotoDown(this.arg.to[a], this.DivDownEVe[a]);
} else {
this.arg.to[a].onmousedown = this.DivDown(a);
}
}
},
addEvent:function(obj, evetype, fun) {
var addevent = {
add:function() {
obj.addEventListener(evetype, fun, false);
},
att:function() {
obj.attachEvent("on" + evetype, fun);
}
};
addevent[this.addevent] && addevent[this.addevent]();
},
delEvent:function(obj, evetype, fun) {
var delevent = {
add:function() {
obj.removeEventListener(evetype, fun, false);
},
att:function() {
obj.detachEvent("on" + evetype, fun);
}
};
delevent[this.addevent] && delevent[this.addevent]();
},
DomUp:function(dom) {
var this_ = this;
return function() {
typeof this_.arg.UpFun === "function" && this_.arg.UpFun();
dom.releaseCapture && dom.releaseCapture();
this_.DelPointerShape();
typeof this_.DomMoveEve === "function" && this_.delEvent(document, this_.eveMold[1], this_.DomMoveEve);
if (typeof this_.DomUpEve === "function") {
this_.delEvent(document, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, "blur", this_.DomUpEve);
this_.delEvent(dom, "losecapture", this_.DomUpEve);
}
return false;
};
},
setWHfalse:function(argform, iW, iH, proportional, MaxW, MaxH) {
iW > MaxW && (iW = MaxW);
iH > MaxH && (iH = MaxH);
iW < this.Min && (iW = this.Min);
iH < this.Min && (iH = this.Min);
return [ iW, iH ];
},
setWfalse:function(argform, iW, iH, proportional, MaxW, MaxH) {
iW > MaxW && (iW = MaxW);
iW < this.Min && (iW = this.Min);
return [ iW, this.formAllH ];
},
setHfalse:function(argform, iW, iH, proportional, MaxW, MaxH) {
iH > MaxH && (iH = MaxH);
iH < this.Min && (iH = this.Min);
return [ this.formAllW, iH ];
},
CycleCalculation:function(iW, iH, proportional, MaxW, MaxH) {
if (iH > MaxH) {
iH = MaxH;
iW = Math.round(iH * proportional);
return this.CycleCalculation.apply(this, arguments);
}
if (iW > MaxW) {
iW = MaxW;
iH = Math.round(iW / proportional);
return this.CycleCalculation.apply(this, arguments);
}
if (iH < this.Min) {
iH = this.Min;
iW = Math.round(iH * proportional);
return this.CycleCalculation.apply(this, arguments);
}
if (iW < this.Min) {
iW = this.Min;
iH = Math.round(iW / proportional);
return this.CycleCalculation.apply(this, arguments);
}
return [ iW, iH ];
},
setHtrue:function(argform, iW, iH, proportional, MaxW, MaxH) {
iW = Math.round(iH * proportional);
return this.CycleCalculation(iW, iH, proportional, MaxW, MaxH);
},
setWtrue:function(argform, iW, iH, proportional, MaxW, MaxH) {
iH = Math.round(iW / proportional);
return this.CycleCalculation(iW, iH, proportional, MaxW, MaxH);
},
amend:function(iW, iH, formParent, strLL, strTT) {
var L = iW - this.formAllW, T = iH - this.formAllH, Left, Top, ImgLeft, ImgTop, this_ = this, HTML5 = this.HTML5, fun = {
LL:function() {
Left = Math.round(this_.formLeft - L);
this_.formLeft = Left;
HTML5.setL(formParent, Left + "px");
},
TT:function() {
Top = Math.round(this_.formTop - T);
this_.formTop = Top;
HTML5.setT(formParent, Top + "px");
},
ML:function() {
L *= .5;
Left = this_.formLeft - L;
this_.formLeft = Left;
HTML5.setL(formParent, Left + "px");
},
MT:function() {
T *= .5;
Top = this_.formTop - T;
this_.formTop = Top;
HTML5.setT(formParent, Top + "px");
},
NO:function() {}
};
fun[strLL](), fun[strTT]();
},
DomMove:function(this_, dom, disX, disY, PNW, PNH, formParent, MaxW, MaxH, strLL, strTT) {
var eveclientX, eveclientY, drawWH, iW, iH, argform, iHH, iWW, ImgMain = this_.arg.ImgMain, ImgDom = this_.arg.ImgDom;
if (typeof this_.DomUpEve === "function") {
this_.delEvent(document, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, "blur", this_.DomUpEve);
this_.delEvent(dom, "losecapture", this_.DomUpEve);
}
this_.DomUpEve = this_.DomUp(dom);
this_.addEvent(document, this_.eveMold[2], this_.DomUpEve);
this_.addEvent(window, this_.eveMold[2], this_.DomUpEve);
this_.addEvent(window, "blur", this_.DomUpEve);
this_.addEvent(dom, "losecapture", this_.DomUpEve);
return function(eve) {
eve = eve || window.event;
if (eve.button > 1) {
this_.DomUp(this)();
return false;
}
eveclientX = this_.eveMold[3](eve, "clientX"), eveclientY = this_.eveMold[3](eve, "clientY"),
argform = this_.arg.form;
setTimeout(function() {
iW = PNW * (eveclientX - disX);
iH = PNH * (eveclientY - disY);
this_.selectionempty();
drawWH = this_.drawfun(argform, iW, iH, this_.arg.proportional[0], MaxW, MaxH);
iW = drawWH[0];
iH = drawWH[1];
this_.amend(iW, iH, formParent, strLL, strTT);
this_.formAllW = iW;
this_.formAllH = iH;
iW = this_.formW = iW - this_.Mdouble;
iH = this_.formH = iH - this_.Mdouble;
argform.style.width = iW + "px", argform.style.height = iH + "px";
this_.ie6(formParent, iW, iH);
this_.MovePhoto(true, 0, 0);
}, 1);
return false;
};
},
defaultShear:function() {
this.arg.Shearbar.style.display = "none";
typeof this.MoveDivEve === "function" && this.MoveDivEve();
typeof this.zoomEve === "function" && this.zoomEve();
if ("cssText" in this.arg.ImgMain.style) this.arg.ImgMain.style.cssText = this.arg.ImgDom.style.cssText = ""; else {
this.arg.ImgMain.setAttribute("style", "");
this.arg.ImgDom.setAttribute("style", "");
}
this.arg = this.ImgUrl = this.formW = this.formH = this.formAllW = this.formAllH = this.drawfun = this.formParent = this.ImgWidth = this.ImgHeight = this.artworkW = this.artworkH = this.BoxW = this.BoxH = this.Border = this.Mdouble = this.ImgScales = this.Min = this.formLeft = this.formTop = this.relatL = this.relatT = this.relatW = this.relatH = this.saveL = this.ImgOWidth = this.ImgOHeight = this.saveT = this.HTML5.lock = this.HTML5.PhotoHTML5True = false;
this.rotate = this.ImgMainT = this.ImgDomT = this.ImgMainL = this.ImgDomL = 0;
this.preview.isW = [];
this.preview.isH = [];
this.ImgRotateFun = function(W, H) {
return [ W, H ];
};
},
SendUserMsg:function(msg, n, p, b, c, i, k, f) {
this.arg.black.style.zIndex = i ? 199 :99;
this.pointhandle(n, 5, msg, p, b, c, f);
k ? this.arg.Shearbar.style.display = "none" :this.arg.Shearbar.style.display = "block";
},
again:function() {
this.arg.SelectBox.style.visibility = "visible";
this.arg.Shearbar.style.display = "none";
this.runImgUrl = false;
this.arg.ImgDom.src = this.arg.ImgMain.src = this.arg.relativeUrl + "images/default.gif";
},
CoordinateData:function(True) {
var SendPHPSmaller = function(W, H, P) {
if (W < 1) {
W = 1;
H = Math.round(1 / P);
}
if (H < 1) {
H = 1;
W = Math.round(P);
}
return [ W, H ];
}, SendArry = {};
True || (SendArry.url = "../" + this.ImgUrl);
var R = {
1:270,
2:180,
3:90,
"90":270,
"180":180,
"270":90
}[this.rotate] || (R = this.rotate), LT = this.ImgWidth, TL = this.ImgHeight, XYWH = {
0:LT,
90:TL,
180:LT,
270:TL
}, XYWHP = this.ImgOWidth / XYWH[R];
SendArry.R = R;
SendArry.X = Math.round((Math.abs(this.ImgDomL) - this.Border) * XYWHP);
SendArry.Y = Math.round((Math.abs(this.ImgDomT) - this.Border) * XYWHP);
SendArry.P = this.arg.proportional[0];
var P = this.formAllW / this.formAllH, Smaller = SendPHPSmaller(Math.round(this.formAllW * XYWHP), Math.round(this.formAllH * XYWHP), P);
SendArry.IW = Smaller[0];
SendArry.IH = Smaller[1];
Smaller = SendPHPSmaller(this.formAllW, this.formAllH, P);
SendArry.FW = Smaller[0];
SendArry.FH = Smaller[1];
return SendArry;
},
SendPHP:function(postArgs) {
var this_ = this, SendArry, HTML5 = this.HTML5, ResultData;
this.SendUserMsg("正在为你处理截图,稍等...", 0, 2, "#fbeb61", "#3a414c", true, true, function() {
if ((HTML5.HTML5PHP || HTML5.PhotoHTML5True) && HTML5.canvas) {
try {
HTML5.BOLBID && HTML5.URL.revokeObjectURL(HTML5.BOLBID);
SendArry = this_.CoordinateData(true);
ResultData = HTML5.CanvasImg(SendArry, postArgs, this_);
} catch (e) {
this_.SendUserMsg("错误:切割图片时严重报错,请更换浏览器试试,或者换张图片", 5e3, 0, "#f4102b", "#fff", false);
return;
}
} else {
var POSTHTML = "";
if (Object.prototype.toString.call(postArgs) === "[object Object]") {
for (var key in postArgs) {
POSTHTML += "&" + key + "=" + postArgs[key];
}
}
SendArry = this_.CoordinateData();
ResultData = "JSdate=" + window.ShearPhoto.JsonString.JsonToString(SendArry) + POSTHTML;
}
this_.MyAjax.carry({
url:this_.arg.url,
data:ResultData,
type:"POST",
timeout:9e4,
async:true,
lock:true,
complete:false,
success:function(serverdata) {
serverdata = window.ShearPhoto.JsonString.StringToJson(serverdata);
if (serverdata === false) {
this_.SendUserMsg("错误:请保证后端环境运行正常", 5e3, 0, "#f4102b", "#fff", false);
return;
}
if (serverdata["erro"]) {
this_.SendUserMsg("错误:" + serverdata["erro"], 5e3, 0, "#f4102b", "#fff", false);
return;
}
this_.runImgUrl = false;
typeof this_.complete === "function" && this_.complete(serverdata);
delete this_.HTML5.Images;
},
error:function(ErroMsg) {
this_.SendUserMsg("错误:连接后端失败,可能原因,超时!或者后端环境无法运行", 5e3, 0, "#f4102b", "#fff", false);
},
cache:false
});
});
},
DivDown:function(a) {
var this_ = this, PNW = 1, PNH = 1, strLL = "NO", strTT = "NO", MaxW, MaxH, W, H, formParentoffsetLeft, formParent, formParentoffsetTop;
return function(event) {
var event = event || window.event, eventbutton = event.button, typebutton = typeof eventbutton, clientX, clientY;
event.preventDefault && event.preventDefault();
if (typebutton !== "number") {
this_.eveMold = [ "touchstart", "touchmove", "touchend", function(events, clientXY) {
return events.touches[0][clientXY];
} ];
clientX = event.touches[0].clientX;
clientY = event.touches[0].clientY;
} else {
this_.eveMold = [ "mousedown", "mousemove", "mouseup", function(events, clientXY) {
return events[clientXY];
} ];
clientX = event.clientX;
clientY = event.clientY;
}
if (eventbutton < 2 || typebutton !== "number") {
W = this_.formAllW, H = this_.formAllH, formParent = this_.formParent, formParentoffsetLeft = this_.formLeft,
formParentoffsetTop = this_.formTop;
switch (a) {
case "BottomRight":
MaxW = this_.relatW - formParentoffsetLeft, MaxH = this_.relatH - formParentoffsetTop;
this_.arg.proportional[0] ? this_.drawfun = this_.setHtrue :this_.drawfun = this_.setWHfalse;
this_.PointerShape("nw-resize");
break;
case "TopRight":
PNH = -1;
strTT = "TT";
MaxW = this_.relatW - formParentoffsetLeft, MaxH = formParentoffsetTop + this_.formAllH;
this_.arg.proportional[0] ? this_.drawfun = this_.setHtrue :this_.drawfun = this_.setWHfalse;
this_.PointerShape("ne-resize");
break;
case "Bottomleft":
PNW = -1;
strLL = "LL";
MaxW = formParentoffsetLeft + this_.formAllW;
MaxH = this_.relatH - formParentoffsetTop;
this_.arg.proportional[0] ? this_.drawfun = this_.setHtrue :this_.drawfun = this_.setWHfalse;
this_.PointerShape("ne-resize");
break;
case "Topleft":
PNH = PNW = -1;
strLL = "LL";
strTT = "TT";
MaxW = formParentoffsetLeft + this_.formAllW;
MaxH = formParentoffsetTop + this_.formAllH;
this_.arg.proportional[0] ? this_.drawfun = this_.setHtrue :this_.drawfun = this_.setWHfalse;
this_.PointerShape("nw-resize");
break;
case "Topmiddle":
strLL = "ML";
var MaxWA = formParentoffsetLeft, MaxWB = this_.relatW - MaxWA - this_.formAllW;
MaxW = Math.min(MaxWA, MaxWB) * 2 + this_.formAllW;
strTT = "TT";
MaxH = formParentoffsetTop + this_.formAllH;
PNH = -1;
this_.arg.proportional[0] ? this_.drawfun = this_.setHtrue :this_.drawfun = this_.setHfalse;
this_.PointerShape("n-resize");
break;
case "leftmiddle":
PNH = PNW = -1;
MaxW = formParentoffsetLeft + this_.formAllW;
var MaxHA = formParentoffsetTop, MaxHB = this_.relatH - MaxHA - this_.formAllH;
MaxH = Math.min(MaxHA, MaxHB) * 2 + this_.formAllH;
strTT = "MT";
strLL = "LL";
this_.arg.proportional[0] ? this_.drawfun = this_.setWtrue :this_.drawfun = this_.setWfalse;
this_.PointerShape("e-resize");
break;
case "Rightmiddle":
MaxW = this_.relatW - formParentoffsetLeft;
var MaxHA = formParentoffsetTop, MaxHB = this_.relatH - MaxHA - this_.formAllH;
MaxH = Math.min(MaxHA, MaxHB) * 2 + this_.formAllH;
strTT = "MT";
this_.arg.proportional[0] ? this_.drawfun = this_.setWtrue :this_.drawfun = this_.setWfalse;
this_.PointerShape("e-resize");
break;
case "Bottommiddle":
var MaxWA = formParentoffsetLeft, MaxWB = this_.relatW - MaxWA - this_.formAllW;
MaxW = Math.min(MaxWA, MaxWB) * 2 + this_.formAllW;
MaxH = this_.relatH - formParentoffsetTop;
this_.arg.proportional[0] ? this_.drawfun = this_.setHtrue :this_.drawfun = this_.setHfalse;
strLL = "ML";
this_.PointerShape("n-resize");
break;
default:
break;
}
var disX = clientX - PNW * W, disY = clientY - PNH * H;
this.setCapture && this.setCapture();
typeof this_.DomMoveEve === "function" && this_.delEvent(document, this_.eveMold[1], this_.DomMoveEve);
this_.DomMoveEve = this_.DomMove(this_, this, disX, disY, PNW, PNH, formParent, MaxW, MaxH, strLL, strTT);
this_.addEvent(document, this_.eveMold[1], this_.DomMoveEve);
} else {
this_.DomUp(this)();
}
return false;
};
}
};
window.ShearPhoto.MINGGE = function(a) {
function b() {
try {
var c = function() {
"complete" === document.readyState && (document.detachEvent("onreadystatechange", c),
a());
}, d = window.frameElement;
} catch (e) {
return document.attachEvent("onreadystatechange", c), void 0;
}
if (null != d) return document.attachEvent("onreadystatechange", c), void 0;
try {
document.documentElement.doScroll("left");
} catch (c) {
return setTimeout(b, 13), void 0;
}
a();
}
var c;
"function" == typeof a && (document.addEventListener ? (c = function() {
document.removeEventListener("DOMContentLoaded", c, !1), a();
}, document.addEventListener("DOMContentLoaded", c, !1)) :b());
};
/*--------------------------拉伸,截图.HTML5的压缩,剪图的处理核心部份结束-----------------------------------------------------------------------------*/
/*--------------------------拖拽移动处理开始-----------------------------------------------------------------------------*/
window.ShearPhoto.MoveDiv = function() {
this.arg = new Array(), this.ReckonWH = this.DivW = this.DivH = this.selectionempty = this.addevent = this.DivDownEVe = this.DomMoveEve = this.DomUpEve = this.eveMold = false;
};
window.ShearPhoto.MoveDiv.prototype = {
ZeroSetting:function() {
var getLT = this.HTML5.getLT(this.arg.form),
left = parseFloat(getLT[0]), top = parseFloat(getLT[1]),
size = this._size_(window, true),
leftfun = function() {}, topfun = function() {}, tf = false;
if (!isNaN(left)) {
tf = true;
this.HTML5.setL(this.arg.form, 0);
leftfun = function(a, b) {
a < 0 && (a = 0);
this_.HTML5.setL(b, left - a + "px");
};
}
if (!isNaN(top)) {
tf = true;
this.HTML5.setT(this.arg.form, 0);
topfun = function(a, b) {
a < 0 && (a = 0);
this_.HTML5.setT(b, top - a + "px");
};
}
if (tf === true) {
var size2 = this._size_(window, true);
leftfun(size.W - size2.W, this.arg.form);
topfun(size.H - size2.H, this.arg.form);
}
},
reckon:function(obj, se) {
this._size_(obj);
var this_ = this;
if (se === true) {
var addfun = function() {
this_.ZeroSetting();
this_._size_(obj);
this_.arg.MoveWidth = this_.ReckonWH.W;
this_.arg.MoveHeight = this_.ReckonWH.H;
this_.SetCenter(this_.arg);
};
this.addEvent(window, "resize", addfun);
}
},
_size_:function(obj, t) {
var w, h, ReckonWH;
if (obj === window) {
var DE = {
add:document.documentElement,
att:document.body
}[this.addevent];
w = DE.clientWidth;
h = DE.clientHeight;
ReckonWH = {
W:Math.max(DE.scrollWidth, w),
H:Math.max(DE.scrollHeight, h),
CW:w,
CH:h
};
} else {
w = obj.offsetWidth;
h = obj.offsetHeight;
ReckonWH = {
W:w,
H:h,
CW:w,
CH:h
};
}
if (t === true) return ReckonWH;
this.ReckonWH = ReckonWH;
},
DomUp:function(dom) {
var this_ = this;
return function() {
dom.releaseCapture && dom.releaseCapture();
typeof this_.DomMoveEve === "function" && this_.delEvent(document, this_.eveMold[1], this_.DomMoveEve);
if (typeof this_.DomUpEve === "function") {
this_.delEvent(document, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, "blur", this_.DomUpEve);
this_.delEvent(dom, "losecapture", this_.DomUpEve);
}
return false;
};
},
DivWHFun:function() {
this.DivW = this.arg.form.offsetWidth;
this.DivH = this.arg.form.offsetHeight;
},
DomMove:function(this_, dom, disX, disY, formLeft, formTop) {
var argform = this_.arg.form, DivW = this_.DivW, DivH = this_.DivH, MoveScale, MoveFun = function() {},
shifting = this_.arg.shifting = Object.prototype.toString.call(this_.arg.shifting) === "[object Array]" && this_.arg.shifting.length > 1 ? this_.arg.shifting :new Array(0, 0),
argMoveWidth = this_.arg.MoveWidth - shifting[0],
argMoveHeight = this_.arg.MoveHeight - shifting[1];
if (typeof this_.DomUpEve === "function") {
this_.delEvent(document, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, this_.eveMold[2], this_.DomUpEve);
this_.delEvent(window, "blur", this_.DomUpEve);
this_.delEvent(dom, "losecapture", this_.DomUpEve);
}
this_.DomUpEve = this_.DomUp(dom);
this_.addEvent(document, this_.eveMold[2], this_.DomUpEve);
this_.addEvent(window, this_.eveMold[2], this_.DomUpEve);
this_.addEvent(window, "blur", this_.DomUpEve);
this_.addEvent(dom, "losecapture", this_.DomUpEve);
var maxL = argMoveWidth - DivW, maxT = argMoveHeight - DivH, iL, iT, eveclientX, eveclientY;
typeof this_.arg.MoveFun === "function" && (MoveFun = this_.arg.MoveFun);
MoveScale = [ maxL, maxT ];
return function(eve) {
eve = eve || window.event;
if (eve.button > 1) {
this_.DomUp(this)();
return false;
}
eveclientX = this_.eveMold[3](eve, "clientX"), eveclientY = this_.eveMold[3](eve, "clientY");
setTimeout(function() {
iL = eveclientX - disX;
iT = eveclientY - disY;
this_.selectionempty();
iL = iL < -shifting[0] ? -shifting[0] :iL;
iL = iL > maxL ? maxL :iL;
iT = iT < -shifting[1] ? -shifting[1] :iT;
iT = iT > maxT ? maxT :iT;
this_.HTML5.setLT(argform, iL + "px", iT + "px");
MoveFun(iL, iT, MoveScale);
}, 1);
return false;
};
},
DivDown:function() {
var this_ = this;
return function(event) {
var event = event || window.event, eventbutton = event.button, typebutton = typeof eventbutton, clientX, clientY;
event.preventDefault && event.preventDefault();
if (typebutton !== "number") {
this_.eveMold = [ "touchstart", "touchmove", "touchend", function(events, clientXY) {
return events.touches[0][clientXY];
} ];
clientX = event.touches[0].clientX;
clientY = event.touches[0].clientY;
} else {
this_.eveMold = [ "mousedown", "mousemove", "mouseup", function(events, clientXY) {
return events[clientXY];
} ];
clientX = event.clientX;
clientY = event.clientY;
}
if (eventbutton < 2 || typebutton !== "number") {
var getLT = this_.HTML5.getLT(this_.arg.form), formLeft = parseFloat(getLT[0]), formTop = parseFloat(getLT[1]), disX = clientX - formLeft, disY = clientY - formTop;
this.setCapture && this.setCapture();
typeof this_.arg.DivDownFun === "function" && this_.arg.DivDownFun(this_);
typeof this_.DomMoveEve === "function" && this_.delEvent(document, this_.eveMold[1], this_.DomMoveEve);
this_.DomMoveEve = this_.DomMove(this_, this, disX, disY, formLeft, formTop);
this_.addEvent(document, this_.eveMold[1], this_.DomMoveEve);
} else {
this_.DomUp(this)();
}
return false;
};
},
ShearPhotoDown:function(obj, fun) {
this.addEvent(obj, "mousedown", fun);
this.addEvent(obj, "touchstart", fun);
},
delShearPhotoDown:function(obj, fun) {
this.delEvent(obj, "mousedown", fun);
this.delEvent(obj, "touchstart", fun);
},
et:function() {
var this_ = this;
var cursor = this.arg.cursor || "move";
this_ = this;
for (var i = 0; i < this.arg.to.length; i++) {
if (this.addevent === "add") {
if (typeof this.DivDownEVe !== "function") {
this.DivDownEVe = this.DivDown();
} else {
this.delShearPhotoDown(this.arg.to[i], this.DivDownEVe);
}
this.ShearPhotoDown(this.arg.to[i], this.DivDownEVe);
} else {
this.arg.to[i].onmousedown = this.DivDown();
}
this.arg.to[i].style["cursor"] = cursor;
}
},
delDownEve:function() {
for (var i = 0; i < this.arg.to.length; i++) {
if (this.addevent === "add") {
if (typeof this.DivDownEVe === "function") {
this.delShearPhotoDown(this.arg.to[i], this.DivDownEVe);
}
}
}
},
setdiv:function(argform, CW, CH, arg) {
if (typeof arg.centerFront === "function") {
var CWCH = arg.centerFront();
CW = CWCH[0];
CH = CWCH[1];
}
var DivT = Math.round((CH - this.DivH) *.5);
DivT = DivT < 0 ? 0 :DivT;
var DivL = Math.round((CW - this.DivW) *.5);
DivL = DivL < 0 ? 0 :DivL;
this.HTML5.setLT(argform, DivL + "px", DivT + "px");
typeof arg.centerfun === "function" && arg.centerfun(DivL, DivT, this);
},
addEvent:function(obj, evetype, fun) {
var addevent = {
add:function() {
obj.addEventListener(evetype, fun, false);
},
att:function() {
obj.attachEvent("on" + evetype, fun);
}
};
addevent[this.addevent] && addevent[this.addevent]();
},
delEvent:function(obj, evetype, fun) {
var delevent = {
add:function() {
obj.removeEventListener(evetype, fun, false);
},
att:function() {
obj.detachEvent("on" + evetype, fun);
}
};
delevent[this.addevent] && delevent[this.addevent]();
},
SetCenter:function(arg) {
if (arg.center) {
if (arg.center === 1) {
var CW = this.ReckonWH.CW, CH = this.ReckonWH.CH;
} else {
var ReckonWH = this._size_(arg.center, true);
var CW = ReckonWH.CW, CH = ReckonWH.CH;
}
this.setdiv(arg.form, CW, CH, arg);
}
},
run:function(arg) {
this.arg = arg;
this.DivW = arg.form.offsetWidth;
this.DivH = arg.form.offsetHeight;
this.SetCenter(arg);
typeof arg.zIndex === "number" && (arg.form.style.zIndex = arg.zIndex);
this.et();
}
};
/*--------------------------拖拽移动处理结束-----------------------------------------*/
/*--------------------------与服务器交互数据JS部份开始------------------------------*/
window.ShearPhoto.JsonString = {
_json_:null,
JsonToString:function(arr) {
try {
this._json_ = new Array();
this._read_(arr, true);
var JsonJoin = this._json_.join("");
JsonJoin = JsonJoin.replace(/,([\}\]])/g, function(a, b) {
return b;
});
this._json_ = null;
return JsonJoin;
} catch (e) {
alert("发生错误,错误代码--" + e);
return "";
}
},
StringToJson:function(arrtxt) {
if (typeof arrtxt !== "string") {
alert("错误,请传入JSON字串符");
return;
}
try {
var array = new Function("return " + "(" + arrtxt + ")")();
var type = this._type_(array);
if (type !== "[object Object]" && type !== "[object Array]") {
alert("严重报错:后端没返回到JSON,而是一串无效字符串。\n\n你是在调试吗?\n\n那么按确定,查看那串无效字符串吧");
alert(arrtxt);
return false;
}
return array;
} catch (e) {
alert("严重报错:后端没返回到JSON,而是一串无效字符串。\n\n你是在调试吗?\n\n那么按确定,查看那串无效字符串吧");
alert(arrtxt);
return false;
}
},
_type_:function(arr) {
if (typeof arr.nodeType === "number") return "[object document]";
var Types = Object.prototype.toString.call(arr);
return Types;
},
_addjson_:function(types, txt, txt2, TrueFalse) {
var run = {
"[object Object]":txt,
"[object Array]":txt2
};
this._json_.push(run[types]);
},
_addstring_:function(parameter) {
var of = typeof parameter;
if (of === "string") return '"' + parameter + '"'; else if (of === "number") return parameter;
var types = this._type_(parameter);
if (types === "[object Object]" || types === "[object Array]") {
return false;
} else return '""';
},
_read_:function(arr, TrueFalse) {
var types = this._type_(arr);
if (TrueFalse && types !== "[object Object]" && types !== "[object Array]") {
alert("你传入不是数组或JSON");
this._json_ = null;
return false;
}
this._addjson_(types, "{", "[", TrueFalse);
for (var a in arr) {
if (typeof arr.constructor.prototype[a] === "undefined") {
var ArrA = this._addstring_(arr[a]);
if (typeof ArrA !== "boolean") {
this._addjson_(types, '"' + a + '":' + ArrA + ",", ArrA + ",");
} else {
this._addjson_(types, '"' + a + '":', "");
this._read_(arr[a], false);
}
}
}
TrueFalse = TrueFalse ? "" :",";
this._addjson_(types, "}" + TrueFalse, "]" + TrueFalse);
}
};
window.ShearPhoto.MyAjax = function() {
this.serverdata = this.erromsg = this.timeout = this.stop = this.xmlhttp = false;
this.transit = true;
};
window.ShearPhoto.MyAjax.prototype.handle = function(xmlhttp, arg) {
if (4 == xmlhttp.readyState) {
if (this.stop === true) return;
this.transit = true;
if (arg.timeout && arg.async) {
clearTimeout(this.timeout);
this.timeout = false;
}
if (200 == xmlhttp.status) {
var responseText = this.serverdata = xmlhttp.responseText.replace(/(^\s*)|(\s*$)/g, "");
typeof arg.success === "function" && arg.success(responseText);
} else {
this.erromsg = xmlhttp.status;
typeof arg.error === "function" && arg.error(xmlhttp.status);
}
} else {
if (0 == xmlhttp.readyState) {
if (this.stop === true) return;
if (arg.timeout && arg.async) {
clearTimeout(this.timeout);
this.timeout = false;
}
this.erromsg = xmlhttp.readyState;
this.transit = true;
typeof arg.error === "function" && arg.error(xmlhttp.readyState);
}
}
};
window.ShearPhoto.MyAjax.prototype.out = function(arg) {
this.transit = true;
this.erromsg = 504;
this.stop = true;
typeof arg.error === "function" && arg.error(504);
};
window.ShearPhoto.MyAjax.prototype.carry = function(arg) {
if (arg.lock && !this.transit) return false;
this.transit = false;
this.stop = this.erromsg = false;
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
arg.type = arg.type.toUpperCase();
var ContentType = function() {};
if (typeof arg.data === "string") {
arg.data = arg.data.replace(/(^\s*)|(\s*$)/g, "");
ContentType = function() {
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
};
} else {
if (Object.prototype.toString.call(arg.data) !== "[object FormData]") {
arg.data = "";
ContentType = function() {
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
};
} else {
typeof arg.progress === "function" && xmlhttp.upload.addEventListener("progress", arg.progress, false);
arg.type = "POST";
}
}
var SendArg = arg.data == "" ? [ null, "" ] :[ arg.data, "?" + arg.data ];
var self = this;
typeof arg.complete === "function" && arg.complete();
arg.timeout && arg.async && (this.timeout = setTimeout(function() {
self.out(arg);
}, arg.timeout));
if (arg.async === true) {
xmlhttp.onreadystatechange = function() {
self.handle(xmlhttp, arg);
};
}
try {
switch (arg.type) {
case "POST":
xmlhttp.open("POST", arg.url, arg.async);
ContentType();
break;
default:
xmlhttp.open("GET", arg.url + SendArg[1], arg.async);
arg.cache === true || xmlhttp.setRequestHeader("If-Modified-Since", "0");
break;
}
} catch (e2) {
this.erromsg = 505;
if (arg.timeout && arg.async) {
clearTimeout(this.timeout);
this.timeout = false;
}
this.transit = true;
typeof arg.error === "function" && arg.error(505);
return;
}
xmlhttp.send(SendArg[0]);
if (arg.async === false) {
self.handle(xmlhttp, arg);
}
};
/*--------------------------与服务器交互数据JS部份结束----------------------------------*/
/*--------------------------选择上传截图的JS部份开始-------------------------------------*/
window.ShearPhoto.frameUpImg = function(config) {
this.BodyDom = document.body;
this.FORM = config.FORM;
this.upfile = this.FORM.UpFile;
this.config = config;
this.upfileclick = false;
typeof config.erro !== "function" && (config.erro = function() {});
this.FORM.action = config["url"];
var this_ = this;
this.parentNodes = this.upfile.parentNode;
if (window.attachEvent) {
this.parentNodes.onmousemove = function() {
var offsetX = window.event.offsetX + 5;
offsetX < 0 && (offsetX = 0);
offsetX > 224 && (offsetX = 224);
this_.upfile.style.width = offsetX + "px";
};
}
};
window.ShearPhoto.frameUpImg.prototype = {
createframe:function() {
this.BodyDom.insertAdjacentHTML("afterBegin", '<iframe name="POSTiframe" class="displayNone" ></iframe>');
this.iframe = document.getElementsByName("POSTiframe")[0];
this.createEve(this.iframe, window.frames["POSTiframe"]);
},
createEve:function(iframe, windowframes) {
var this_ = this;
if (this.upfile.files) {
iframe.onload = function() {
iframe.onload = null;
var windowframesbody = windowframes.document.getElementsByTagName("BODY")[0];
var html = windowframesbody.innerHTML;
this_.Evebubbling(html);
};
} else {
iframe.onreadystatechange = function() {
if (iframe.readyState === "complete") {
iframe.onreadystatechange = null;
var windowframesbody = windowframes.document.getElementsByTagName("BODY")[0];
var html = windowframesbody.innerHTML;
this_.Evebubbling(html);
}
};
}
},
delframe:function() {
this.BodyDom.removeChild(this.iframe);
this.DelCreateUpfile();
},
Evebubbling:function(html) {
if (html != "") {
this.upfile.onclick = this.upfileclick;
typeof this.fun === "function" && this.fun(html);
this.delframe();
}
},
inArray:function(elem, array) {
if (array.indexOf) {
return array.indexOf(elem);
}
for (var i = 0, length = array.length; i < length; i++) {
if (array[i] === elem) {
return i;
}
}
return -1;
},
DelCreateUpfile:function() {
var change = this.upfile.onchange;
this.upfile.onchange = this.upfile.onclick= null;
this.parentNodes.removeChild(this.upfile);
var inputfile = document.createElement("input");
inputfile.setAttribute("type", "file");
inputfile.setAttribute("name", "UpFile");
this.parentNodes.appendChild(inputfile);
this.upfile = inputfile;
this.upfile.onchange = change;
this.upfile.onclick = this.upfileclick;
},
Upsubmit:function(upfile) {
try {
var filestype = upfile.value.split(".");
filestype = Object.prototype.toString.call(filestype) === "[object Array]" ? filestype[filestype.length - 1] :"";
if (this.inArray(filestype.toLowerCase(), this.config.UpType) == -1) {
this.DelCreateUpfile();
this.config.erro("请选择正确图片类型");
return;
}
var files = upfile.files,type;
if (files) {
files = files[0];
files.type && (type= files.type==="image/gif" ? "image/jpeg":files.type,this.config.HTML5.ImagesType = type);
if (files.size <= 0) {
this.DelCreateUpfile();
this.config.erro("错误:不能选择空字节文件");
return;
}
if (this.config.HTML5.canvas) {
if (files.size > this.config.HTML5FilesSize * 1024 * 1024) {
this.DelCreateUpfile();
this.config.erro("错误:HTML5上传不能大于" + this.config.HTML5FilesSize + "M");
return;
}
} else if (files.size > this.config.FilesSize * 1024 * 1024) {
this.DelCreateUpfile();
this.config.erro("错误:文件不能大于" + this.config.FilesSize + "M");
return;
}
}
var this_ =this;
typeof this.config.preced === "function"
&& this.config.preced(function(){
if (this_.config.HTML5.canvas) {
var reader = new FileReader();
reader.onload = function() {
this_.DelCreateUpfile();
this_.config.HTML5.zipImg(this.result, this_.config.HTML5ZIP, type, function(DataUrl) {
typeof this_.fun === "function" && this_.fun({
success:DataUrl
}, true);
delete (reader);
});
};
reader.readAsDataURL(files);
return;
}
this_.createframe();
this_.FORM.submit();
});
} catch (e) {
this.DelCreateUpfile();
this.config.erro("你选择了非图片类型,或 图片路径有误");
return;
}
},
run:function(fun) {
var this_ = this;
this.fun = fun;
this.upfile.onclick = this.upfileclick = function() {
typeof this_.config.fileClick === "function" && this_.config.fileClick();
};
this.upfile.onchange = function() {
if (this.value == "") return false;
this.onclick = function() {
return false;
};
this_.Upsubmit(this);
};
}
};
/*--------------------------选择上传截图的JS部份结束-----------------------------------*/