最近的一个项目需求是写一个type为filex型的input控件,这个控件:

  • 第一,要自定义样式;
  • 第二,要能直接在本地预览上传的图片;
  • 第三,要能检测图片的尺寸是否符合要求。

故综合网上的资源写了下面的代码。思路说明持续补充中。。。

html

<div class="item" id="select-storeKeeper">
<span class="label"><b class="ftx04">*</b>身份证正面:</span>
<div class="uploadwrap">
<input type="file" id="idcard" name="idcard">
<input name="path" id="path" autocomplete="off" onpaste="return false;">
<input name="uploadbtn1" id="uploadbtn1" type="button" value="浏览文件" tabindex="4">
<span class="reminder">
<span class="myword">请上传身份证正面照片:</span>
<span class="mysize"> 宽224~264px,高132~186px</span>
</span>
</div>
</div>
<div id="idcardPreview" class="beforePre" >
<img src="" alt="idcard">
</div>
<div class="preWord" id="preWord1">(上传图片预览)</div>

js:

/********************图片预览********************/
function idcardPreview(args) {//idcard实际上传控件处理程序(即类型为type的input)
var inputObj=document.getElementById("idcard");
var imgPreview=document.getElementById("idcardPreview");
var imgSelf=document.querySelector("#idcardPreview img");
var uploadbtn=document.getElementById("uploadbtn1");
var path=document.forms["form0"].elements["path"];
var reminder=document.querySelector("#select-storeKeeper .reminder");
var preword=document.getElementById("preWord1"); imgSelf.onload=function(event){
if (imgSelf.style.width) {//如事先已有图片样式,则图片宽高样式得先去掉
imgSelf.style.width=null;
}
if (imgSelf.style.height) {
imgSelf.style.height=null;
}
var lw=243,lh=153;
var scale=1.6; var rw=imgSelf.offsetWidth;
var rh=imgSelf.offsetHeight;
console.log("rw:"+rw+" "+"rh:"+rh);
var fw,fh; if (rw/rh>2||rw/rh<1.2) {
removeClass(imgPreview,"preview");
preword.style.display="none";
path.style.display="none";//IE8-不认识setProperty
reminder.style.display="inline";
uploadbtn.style.left=null;
inputObj.value="";
alert("您的图片尺寸不合适,请更换图片\n请保证图片宽224~264px,高132~186px。");
}
else{
if (rw/rh>scale) {
fw=lw;
fh=rh/(rw/lw); }
else if (rw/rh<scale) {
fh=lh;
fw=rw/(rh/lh);
}
else{
fh=lh;
fw=lw;
}
console.log("fw:"+fw+" "+"fh:"+fh);
imgSelf.style.width=fw+"px";
imgSelf.style.height=fh+"px"; preword.style.display="block";
path.value=inputObj.value;//显示文件路径
path.style.display="inline";//IE8-不认识setProperty
reminder.style.display="none";
uploadbtn.style.left="190px";
}
} if (inputObj.files && inputObj.files[0]) {//IE11,IE10,Chrome,FF
addClass(imgPreview,"preview");
imgSelf.src=window.URL.createObjectURL(inputObj.files[0])
||inputObj.files[0].getAsDataURL();//火狐7以下
}
else{//IE10以下
inputObj.value="";
alert("您的浏览器版本过低,图片上传失败。\n请更换浏览器(ie10+或其他高级浏览器),谢谢!")
}
} function addClass(elem,newclass) {//跨浏览器的样式添加函数
if (elem.classList) {
elem.classList.add(newclass);
}
else{
var classArr=elem.className.split(/\s+/);
classArr.push(newclass);
elem.className=classArr.join(" ");
}
}
function removeClass(elem,oldclass) {//跨浏览器的样式移除函数
if (elem.classList) {
elem.classList.remove(oldclass);
}
else{
var classArr=elem.className.split(/\s+/);
for (var i=0,len=classArr.length;i<len;i++) {
if (classArr[i]==oldclass) {
classArr.split(i,1);
break;
}
}
elem.className=classArr.join(" ");
}
} function idcardClick() {//idcard形式上传按钮事件处理程序
document.forms["form0"].elements["idcard"].click();
} window.onload=function(){
document.getElementById("uploadbtn1").onclick=idcardClick; document.getElementById("idcard").onchange=idcardPreview;
}

自定义type为file型input控件+该控件具有本地图片预览功能的更多相关文章

  1. 通过file文件选择图片预览功能

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

  2. input file样式修改,图片预览删除功能

    本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能. 效果图如下: 这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这 ...

  3. input[type='file']样式美化及实现图片预览

    前言 上传图片是常见的需求,多使用input标签.本文主要介绍 input标签的样式美化 和 实现图片预览. 用到的知识点有: 1.input标签的使用 2.filelist对象 和 file对象 3 ...

  4. html input type=file 选择图片,图片预览 纯html js实现图片预览

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

  5. input[type="file"]的图片预览

    在项目中遇到用input标签file类型的文件上传,想实在上传之前进行图片的预览功能:之前的做的一个解决方案是文件先上传上去然后返回地址再显示在页面上,这样就不太好,因为用户基本信息可能并没有保存,但 ...

  6. 浅谈简单实现file控件的图片预览,裁剪和上传。

    1.图片预览之FileReader对象    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据 ...

  7. 上传图片预览JS脚本 Input file图片预览的实现示例

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

  8. 一段上传图片预览JS脚本,Input file图片预览的实现

    在深圳做项目的时候,需要一个用户上传头像预览的功能!是在网上找了好多,都不太满意.要么是flash的,要么是Ajax上传后返回图片路径的,要么压根就是不能用的.幸运的是在这个项目以前有人写过一个图片预 ...

  9. 一、简单的图片上传并预览功能input[file]

    一.简单的图片上传并预览功能input[file] <!DOCTYPE html> <html lang="en"> <head> <me ...

随机推荐

  1. Win7程序运行出现Windows Based Scrip Host 已停止工作问题的解决方法

    最近在使用类似于Teamviewer这样的程序时,突然运行不了,报错:Microsoft Windows Based Scrip Host 已停止工作的问题,从系统日志来看,好像是空指针问题,但是又无 ...

  2. 九度OJ 1185:特殊排序 (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:15588 解决:3592 题目描述: 输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序. 输入: 输入第一行包括1个整数N,1< ...

  3. Springboot整合日志时候出现的问题

    上图是问题,按照路径去找下,发现其实是jar包重复导致的! 在对应的项目上,右键--->属性(Properties)--->JavaBuild Path  然后选择Libraries 页签 ...

  4. spring mvc 基本原理

    在web.xml配置spring mvc入口servlet: <servlet> <servlet-name>mvc-dispatcher</servlet-name&g ...

  5. 关于中国省市的一份js代码

    下面是一份关于中国省市的js代码,搜藏起来,非常有用. var arrCity = [ { name:"请选择", sub:[{name:"请选择"}], ty ...

  6. centos install docker setup centos7 安装docker

    centos7 安装docker 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2: 添 ...

  7. 数据库存储I/O类型分析与配置

    存储设备作为数据的容器,为应用提供数据存取服务,而存储系统将数据展现给不同的应用后,应用程序对数据访问不尽相同.简要来说,就是读和写,更加细分的话是以不同的传输单元(I/O大小)进行顺序和随机类型的读 ...

  8. 关于python2中的unicode和str以及python3中的str和bytes

    python3有两种表示字符序列的类型:bytes和str.前者的实例包含原始的8位值:后者的实例包含Unicode字符. python2中也有两种表示字符序列的类型,分别叫做str和unicode. ...

  9. (转载)《C#高级编程》读书笔记

    C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) short System.Int16 16 ...

  10. Android selector背景选择器

    selector根据不同的选定状态来定义不同的现实效果 常用属性: android:state_selected--------选中 android:state_focused--------获得焦点 ...