浏览器图片选择预览,旋转,批量上传js代码实现
工作中遇到的业务场景是与同事一起研究的,主要是与IE版本兼容。事实上,一些琐碎的知识点在互联网上收集解决方案,然后集成,主要有以下几点:
1的图片预览。IE输入类型=文件是使用IE的过滤器CSS
dximagetransform.microsoft.alphaimageloader ProgID:
Chrome浏览器使用文件API的文件阅读器
2。图片旋转,即是:dximagetransform ProgID。微软。矩阵的滤波器(滤波相结合,用空格分隔)
Chrome浏览器使用画布
三.上传图片,我用所有的形式动态添加输入{类型=文件}在看不见的iframe实现。铬/火狐浏览器可以使用XHR,但我不想改变它
4。为了实现上传图片不刷新本页,并多次选择文件,所以它是一个iframe致力于维护清单输入{类型=文件},比较我们的。
你可以参考下面的代码,这主要是一个主要的HTML,然后两个iframe HTML。上传的数据来自服务器端,成功上传文件名,用于删除预览。
复制代码代码如下所示:
上传/回调
/ / resultlist -> { 'file1 ''file2},文件上传成功
无功uploadcallback =功能(resultlist){
console.log(JSON.stringify(resultlist));
var I=0;
为(;;i < resultlist.length;i++){
VaR指标= resultlist {我},substr(文件的长度);
($:复选框{值+ +索引+ })。父(父)(删除)();
}
};
$(函数(){())
保存图像的旋转角度,以便提交给服务器处理。
无功rotateang = { };
指定的后缀的数目
var = 0;
/ / /如果Chrome FF,需要使用API生成IMG文件
无功genimgtpl =功能(输入、指数){
返回' ';
};
无功readimgfrominput =功能(_input,指数){
无功inputdom = _input { 0 };
如果(inputdom { 'files ' }){
VaR的读者= FileReader();
reader.onload =功能(e){
('img美元。主营:去年)。Attr({ SRC:e.target。结果});
}
reader.readasdataurl(inputdom { 'files} { 0 });
其他{ }
VaR src= _input { 0 }的价值;
imgdom = $(var的# IMG +指数);
ImgDom.attr('src-old,SRC);
ImgDom.css({
浮:右,
位置:'relative,
溢出:隐藏的,
宽度:'195px,
身高:'195px
});
ImgDom.css({ 'filter:ProgID:DXImageTransform.Microsoft.AlphaImageLoader(启用=真实,sizingmethod =规模,SRC = SRC + })}))
}
};
var ShowImg =功能(_input){
var索引;
_input.addclass('hide);
_input.attr('name',文件+指数);
_input.attr('data-index指数);
iframewin = $(var的#选择'){ 0 }。contentwindow;
IframeWin.addInput(_input);
VaR TPL =+ genimgtpl(_input,指数)+
+
+
';
$(# imgdiv)。追加(TPL);
readimgfrominput(_input,指数);
};
添加=函数(){ var()
$(# uploadbtn)。在();
};
输入/输入文件绑定事件
$(# uploaddiv输入)。活(‘变',函数(){(){
路径= this.value VaR;
如果(!路径){
返回;
}
ShowImg($(this));
AddAnother();
});
在复选框中,删除输入
(# imgdiv输入:复选框)/美元。活(‘变',函数(){
无功 / /系统=美元(这)是(检查);
/ / console.log(校核);
};
$(# imgdiv跨度。右转)。活(听到咔哒声,函数(){(){
最后一个时间/旋转角度
VaR指标= $(这),兄弟姐妹('span。选择)。找到(输入的)瓦迩();
无功oldang = rotateang { } | |指数0;
无功newang = oldang + 90;
rotateang { } = newang指数;
$(# IMG +指标),旋转(90);
});
当表单提交给复选框选择时,删除输入{文件}
$(# uploadbtn)。Click(function(){)
choosednum = $(var的# imgdiv输入:复选框)。滤波器(':检查')。长度;
如果(!choosednum){
警报(请选择要上传的文件!);
返回false;
}
选定数组的数目
choosedindexlist = $(var的# imgdiv输入:复选框)。滤波器(':检查')。图(函数(){(){()
返回this.value;
});
两 / / iframe,一个用于输入{类型=文件}保存选择
一个用于表单/上传
uploadiframe = $(var的#上传){ 0 }。contentwindow;
chooseiframe = $(var的#选择'){ 0 }。contentwindow;
var i = 0;
为(;;i < choosedindexlist.length;i++){
VaR指标= choosedindexlist {我};
VaR inputfile = chooseiframe。$(' # uploaddiv输入)。滤波器({数据指数= +指数+});
uploadiframe。$(' # uploadform)添加(输入);
旋转度
VaR昂= rotateang { } | |指数0;
如果(% 360)!= 0){
无功tplinput =;
uploadiframe。$(' # uploadform追加(tplinput));
}
}
UploadIframe.doUpload();
返回false;
});
});
在IE7中,8, 9没有问题,和铬