最近的一个项目需求是写一个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. MoQ(基于.net3.5,c#3.0的mock框架)简单介绍(转)

    https://www.cnblogs.com/nuaalfm/archive/2009/11/25/1610755.html

  2. spider_action

    spider from mobile to mobile to mobile from selenium import webdriver from selenium.webdriver.chrome ...

  3. 【译】前端开发者都应知道的 jQuery 小技巧

    回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: // Back to top $('a.top').click(f ...

  4. linux c编程:进程控制(三)_exec函数

    fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间.堆.栈等资源的副本.注意,子进程持有的是上述存储空间的“副本”,这意味着父子进 ...

  5. Navicat试用期破解方法(转)

    转载网址https://blog.csdn.net/Jason_Julie/article/details/82864187 1.按步骤安装Navicat Premium,如果没有可以去官网下载:ht ...

  6. 为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?

    http://www.oschina.net/question/436724_61401 http://www.google.com/jsapi  他惹的祸 注释掉就可以了- <!-- < ...

  7. HDU - 1175 连连看 【DFS】【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1175 思路 这种题一想到就用搜索, 但是内存是32m 用 bfs 会不会MLE 没错 第一次 BFS的 ...

  8. UIImageView 获取图片的 宽 高

    该文章纯属这两天开发的经验之谈 并且也是平常没注意 这回发现的一个小方法 并且很实用 在开发中 提高了很大的效率 更加符合高保真的要求 通常 美术 切的一些图片 需要 :1还原的 现在 我们一般支持i ...

  9. 【leetcode刷题笔记】Scramble String

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  10. shell 脚本后台运行知识

    1. bash while01.py &      把脚本放在后台执行 2. ctl + c   停止执行前台执行中的脚本(不能停止在后台运行中的脚本) 3. ctl + z   暂停执行前台 ...