Files
jshERP/erp_web/js/imgpreview/imagepreview.js
2018-12-19 23:51:59 +08:00

113 lines
2.7 KiB
JavaScript

function imagepreview(file, view, call) {
var maxHeight = view.clientHeight,
maxWidth = view.clientWidth,
doc = document;
function setsize(info, img){
var iwidth, iheight;
if((info.width / maxWidth) > (info.height / maxHeight)){
iwidth = maxWidth;
iheight = Math.round(iwidth * info.height / info.width);
} else {
iheight = maxHeight;
iwidth = Math.round(iheight * info.width / info.height);
}
with(view.style){
height = iheight + "px";
width = iwidth + "px";
overflow = "hidden";
}
if(img){
with(img.style){
height = width = "100%";
}
view.innerHTML = "";
view.appendChild(img);
}
}
try{
new FileReader();
file.addEventListener("change", function(e){
var image = this.files[0];
function fireError(){
var evObj = doc.createEvent('Events');
evObj.initEvent( 'error', true, false );
file.dispatchEvent(evObj);
file.value = "";
}
if(!/^image\//.test(image.type)){
e.stopPropagation();
e.preventDefault();
fireError();
return false;
}
var reader = new FileReader(),
img = new Image();
reader.onerror = img.onerror = fireError;
img.onload = function(){
var info = {
height: img.height,
width: img.width,
name: image.name,
size: image.size
};
if( call(info) !== false ){
setsize(info, img);
}
img.onload = img.onerror = null;
}
reader.onload = function (){
img.src = reader.result;
}
reader.readAsDataURL(image);
}, false);
}catch(ex){
file.attachEvent("onchange", function() {
var path = file.value,
tt = doc.createElement("tt"),
name = path.slice(path.lastIndexOf("\\") + 1 );
if("XMLHttpRequest" in window){
file.select();
path = doc.selection.createRange().text,
doc.selection.empty();
}
function imgloader (mode){
return "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + path + "', sizingMethod='" + mode + "')";
}
(doc.body || doc.documentElement).appendChild(tt);
with(tt.runtimeStyle){
filter = imgloader("image");
zoom = width = height = 1;
position = "absolute";
right = "9999em";
top = "-9999em";
border = 0;
}
var info = {
height: tt.offsetHeight,
width: tt.offsetWidth,
name: name
};
if( info.height > 1 || info.width > 1 ){
if(call(info) !== false ){
view.style.filter = imgloader("scale");
setsize(info);
}
} else {
file.fireEvent("onerror");
event.cancelBubble = true;
event.returnValue = false;
this.value = "";
}
tt.parentNode.removeChild(tt);
});
}
}