最近在工作中遇到一个问题,就是实现一个反馈页面,这个反馈页面的元素有反馈主题、反馈类型、反馈内容、反馈人联系电话以及反馈图片。前端将这些反馈的元素POST给后台提供的接口;实现这个工作的步骤就是:页面布局——功能实现;

  页面布局非常简单,难就难在功能,如果没有反馈图片这个元素,那么功能实现就更简单了,直接使用jquery中的$.ajax()方法提交表单数据给后台接口;但是因为表单元素中多了反馈图片这个元素,所以需要考虑到以下几个问题:

  1、如何实现多张图片上传?

  <input  type="file"   multiple/>文件上传的实现是指定input框的type属性(type=file包括multiple属性都是H5提供的功能)但是在这个实际场景中,要实现的是上传图片,除了图片之外的其他文件都不能上传。所以就有了第2 个问题:

  2、上传文件类型的限制?

  文件类型限制的实现方式我在反馈页面中用的是数组的indexOf()方法,首先列出图片有哪些类型,通俗讲就是图片有那些后缀名,如下:

  var   fileType = ["jpg","jpeg","png","bmp","gif"];目前我能想到的常用的图片类型就这么多。

  其次,获取到选中图片的type=file输入框的值,在这个值中按照split(".")拆分成数组,最后.pop()将文件后缀名从数组中删除,这个方法会返回删除的元素。如下:

  var   type = document.getElementById("input[type='file']").innerHTML.split(".").pop();

  fileType.indexOf(type.toLocaleLowerCase())!=-1     就表明选中的文件是图片。注意:数组的indexOF()方法使用的是===严格等于,也就是匹配值type必须跟fileType数组中的元素的类型以及值完全相等才可以。例如var  fileType = ["index","of",12];

  console.log(fileType.indexOf(1)————  -1  因为数组元素中没有  1  这个元素,数组不会再次通过12,将12与1进行匹配

  console.log(fileType.indexOf(12)———— 2 返回匹配元素的下标

  console.log(fileType.indexOf("index") ————  0 返回匹配的元素的下标

  到这里只是实现了多文件上传以及文件上传类型的限制的问题,接下来就是:

  3、如何实现本地图片预览

  本地图片预览说白了就是显示图片,显示图片的实现就是创建一个img标签,然后给img标签的src属性指定图片的值,那是不是将本地图片上的图片相对地址传入src属性中就可以了呢?正常来说这没有错,因为我们在html文件中就是这么干的,<img  src="图片相对于html文件的地址"/>就可以在html页面制定的位置显示图片。但是在这里不行。为什么?因为这里是动态添加图片,跟前面提到的静态添加图片不一样。不过实现的思路还是一样,就是指定图片标签的src属性的值,只是这里需要对本地上传的图片的地址进行如下的处理:

  var  url = window.URL.createObjectURL(选中的图片)//不兼容IE。将本地图片的地址进行一种处理。

下面是我的实现本地图片预览的代码,这代码是原生js与jquery结合:

 1 //多文件与单文件的判断,实现本地预览
2 function fileList(){
3 var num = document.getElementById("selFile").files;
4 if(num.length>1){
5 for(var i=0;i<num.length;i++){
6 ImgPre(i);
7 }
8 return ;
9 }
10 else{
11 ImgPre();
12 }
13 };
14 //文件本地预览;涉及到设计默认值
15 function ImgPre(){
16 //var i = 0||arguments[0],设置默认值,但是0比较特殊,会隐式转换为false,所以只有对i进行判断
17 var i = arguments[0];
18 var oDiv = $('<index;div></div>').css({"display":"inline-block","position":"relative","width":"50px","height":"50px","padding":"0","margin":"0 0 0 10px"});
19 //创建img元素
20 var img = $('<img></img>');
21 img.attr('id',"imgPre").css({"width":"50px","height":"50px"});
22 //获取图片地址
24 if(!i){
25 //如果没有传入实参就是用默认值0
26 var url = window.URL.createObjectURL(document.getElementById("selFile").files[0]);
27 }else{
28 var url = window.URL.createObjectURL(document.getElementById("selFile").files[i]);
29 }
30 img.attr('src',url);
31 //取消选择图片
32 var icon = $('<i class="remove iconcel"></i>').css({"position":"absolute","top":"-5px","right":"0","z-index":"999","display":"blcok","background":"red","color":"#fff","border-radius":"50%"}).click(function(){$(this).parent().remove()});
33 oDiv.append(icon);
34 oDiv.append(img);
35 $('.img_wrap').css("display","inline").append(oDiv);
36
37

浅谈js本地图片预览的更多相关文章

  1. 兼容ie[6-9]、火狐、Chrome、opera、maxthon3、360浏览器的js本地图片预览

    html代码: <div id="divPreview"> <img id="imgHeadPhoto" src="Images/H ...

  2. js本地图片预览代码兼容所有浏览器

    html代码 <div id="divPreview" style="width: 160px; height: 170px"><img id ...

  3. js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. js本地图片预览

    相信大家都遇到过上传图片之前预览,网上找了很多,但都不是所有浏览器都支持,不过后来找到一个,但自己没有完全实验. 代码如下: <script> //使用IE条件注释来判断是否IE6,通过判 ...

  5. Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案

    Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案 1. IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案1 1.1. div来完成  ...

  6. 自定义type为file型input控件+该控件具有本地图片预览功能

    最近的一个项目需求是写一个type为filex型的input控件,这个控件: 第一,要自定义样式: 第二,要能直接在本地预览上传的图片: 第三,要能检测图片的尺寸是否符合要求. 故综合网上的资源写了下 ...

  7. 如何通过js实现图片预览功能

    一.效果预览 效果图: 二.实现代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  8. 原生JS实现图片预览功能

    html代码: <div class="album-new fr"> <div class="upload-btn btn-new container& ...

  9. JS实现图片预览与等比缩放

    案例仅为图片预览功能,省略图片上传步骤,框架为easyui. HTML代码: @*text-align:center;水平居中 vertical-align: middle;display: tabl ...

随机推荐

  1. php 23种设计模型 - 原型模式

    原型模式(Prototype) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式是实现 ...

  2. java 中判断输入是否合法 if (变量名.hasNextInt())

    //案例: Scanner sc = new Scanner(System.in); System.out.println("你选择了新修改商品功能!"); System.out. ...

  3. Idea 连接MySQL数据库

    Idea 连接MySQL数据库 注意: 需要导入jar包,mysql-connector-java-8.0.16.jar mysql8.0及以上 使用的驱动 drive=com.mysql.cj.jd ...

  4. 理解 MVCC

    MongoDB.MySQL.Oracle.PostgreSQL 等事务型数据库都有 mvcc 的概念. MVCC: 即多版本并发控制,主要是为了提高数据库的读写性能,让数据库在读写的时候不用去加锁.m ...

  5. WPF 文本描边+外发光效果实现

    解决思路: (1)描边效果可以将文本字符串用GDI+生成Bitmap,然后转成BitmapImage,再用WPF的Image控件显示. (2)外发光效果用WPF自带的Effect实现 代码: 1 us ...

  6. 什么是CSRF跨站请求伪造?(from表单效验csrf-ajdax效验csrf-Ajax设置csrf-CBV装饰器验证csrf)

    目录 一:csrf跨站请求伪造 1.什么是CSRF? 2.CSRF攻击案例(钓鱼网站) 3.钓鱼网站 内部原理 4.CSRF原理(钓鱼网站内部本质) 5.从上图可以看出,要完成一次CSRF攻击,受害者 ...

  7. python练习册 每天一个小程序 第0009题

    1 ''' 2 题目描述: 3 找出一个html文件中所有的url 4 5 思路 : 6 利用正则表达式进行匹配 7 8 ''' 9 10 11 import re 12 13 14 with ope ...

  8. 无刷电调修理方法 | 银燕(EMAX)12A无刷电调维修

    一. 银燕(XP-12A)电调修理 笔者的电调在使用4S电池时烧毁,其中一个PMOS管明显烧焦. 将其拆除,买来新元件重新焊接,通电依然冒烟了. 引脚定义 丝印662F: XC6206P332MR 低 ...

  9. Markdown初识及基本使用

    Markdown初识及基本使用 ​ 由Typora编写. 一.初识Markdown 允许人们使用易读易写的纯文本格式编写文档. 是一种轻量级标记语言 编写的文档可以导出 HTML .Word.图像.P ...

  10. Python中的鸭子类型

    今天,我们来聊一聊Python中的鸭子类型(duck typing). 编程语言具有类型概念,例如Python中有数字类型.字符串类型.布尔类型,或者更加复杂的结构,例如元组tuple.列表list. ...