最近的一个项目需求是写一个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. LLVM编译器

    LLVM 1. 说说 LLVM(Low Level Virtual Machine)到底是什么吧 先说编译器:编译器是把程序员的代码翻译成机器可以理解的语言的工具: 再谈 LLVM:一个模块化和可重用 ...

  2. [note]最近公共祖先

    最近公共祖先(LCA)https://www.luogu.org/problemnew/show/P3379 #define RG register #include<cstdio> #i ...

  3. JVM调优-工具篇

    原文地址 16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一 ...

  4. ppm图像相关

    PPM图像格式介绍 直接拿具体的数据来说明是最直接的,使用ue打开ppm文件,采用的都是十六进制asc码表示的,这里要注意地址00000000h中的最后一个字母是始终不变的,这原来没注意晕了我好久,第 ...

  5. 第三章 python中的字符串

    一.字符串的基本操作 所有标准的序列操作对字符串同样适用,如索引.分片.乘法.判断成员是否存在.求长度.最大值和最小值等.记住一点,字符串是不可变的. 二.字符串中重要的方法 1.find(subst ...

  6. 第二篇、css尺寸和边框

    一.尺寸和标签图 二.尺寸单位 %:百分比 in:英寸 cm:厘米 mm:毫米 pt:磅(点)(1pt等于1/72英寸) px:像素(计算机屏幕上的一个点) em:1em等于当前的字体尺寸,2em等于 ...

  7. Android蓝牙串口通讯【转】

    本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...

  8. 高通8X16电池BMS算法(一)【转】

    本文转载自:http://www.voidcn.com/blog/yanleizhouqing/article/p-6037399.html 最近一直在搞电源管理相关内容,之前是8610的bms,现在 ...

  9. Vim 的命令模式转插入模式

    一.在命令模式输入下面的快捷方式: i 在当前光标前插入字符: I 在当前行行首插入字符: a 在当前光标后插入字符: A 在当前行行尾插入字符: o 在当前行下面另起一新行: O 在当前行上面另起一 ...

  10. HDU Rightmost Digit

                                                     Rightmost Digit Time Limit:1000MS     Memory Limit: ...