兼容全浏览器的本地图片预览

为了实现浏览器本地图片预览功能,我使用了三种方式:

1. 通过HTML5的FileApi 获取文件列表,然后转换成base64编码。

2. 使用IE的滤镜来规避IE高版本的安全性检测。

3. 最粗暴的方式,获取File文件域的value值。

-----------------------------------------------------------------------

下面贴代码:

 1   ;(function(root){
 2 
 3     function ImagePreview(params){
 4             
 5         var _this = this;
 6 
 7         this.file = document.getElementById(params.dom);
 8         this.imgbox = document.getElementById(params.obj);
 9         this.img = new Image();
10 
11         this.file.onchange=function(){
12             _this.core(this);
13         }
14     }
15 
16     ImagePreview.prototype.core=function(t){
17         var _this = this;
18         if(window.FileReader){
19 
20             var fileReader = new FileReader();
21             fileReader.readAsDataURL(t.files[0]); 
22             fileReader.onload=function(e){ 
23                 var ev = e || window.event;
24                 _this.img.src = ev.target.result; 
25 
26             }
27         }else if(document.all){
28 
29             if(!-[1,] && !window.XMLHttpRequest){ 
30                 this.img.src = t.value;
31             }else{
32                 t.select();
33                 t.blur();
34                 var imgurl = document.selection.createRange().text;
35 
36                 this.imgbox.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod = "scale",src="'+ imgurl +'")'; 
37                 return false;
38             }
39 
40         }else{
41 
42             if(this.file.files){  
43                 var url = this.file.files[0].getAsDataURL() 
44                 this.img.src = url;
45             }else{ 
46                 this.img.src = t.value;
47             }
48 
49         }
50 
51         this.imgbox.appendChild(this.img);
52     }
53 
54     root.ImagePreview=function(p){
55         new ImagePreview(p);
56     }
57 
58 })(window)

 

调用方式:

ImagePreview({'dom':'file','obj':'imagebox'});

说明:*file 是 input:file的id。

     *obj 是要显示图片位置的id值。

posted @ 2016-03-13 20:15  卷柏的花期  阅读(435)  评论(0编辑  收藏  举报