本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能。

效果图如下:

这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这块儿的可以在自己添加修改。

html代码

 <!--点击预览图片-->
<div class="picDiv">
<div class="addImages">
<!--multiple属性可选择多个图片上传-->
<input type="file" class="file" id="fileInput" multiple accept="image/png, image/jpeg, image/gif, image/jpg" />
<div class="text-detail">
<span>+</span>
<p>点击上传</p>
</div>
</div>
</div>

这里需要注意下:如果在input file 标签里写成accept=“image/*”会造成点击按钮后等待时间稍长才会弹出选择文件框,所以写成

accept="image/png, image/jpeg, image/gif, image/jpg"

css代码
 .imageDiv{
display: inline-block;
width: 140px;
height: 125px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px dashed darkgray;
background: #f8f8f8;
position: relative;
overflow: hidden;
}
.cover{
position: absolute;
z-index:;
top:;
left:;
width: 140px;
height: 125px;
background-color: rgba(0,0,0,.3);
display: none;
line-height: 125px;
text-align: center;
cursor: pointer;
}
.cover>.delbtn{
color: red;
font-size: 20px; }
.imageDiv:hover .cover{
display: block;
}
.addImages{
display: inline-block;
width: 140px;
height: 125px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px dashed darkgray;
background: #f8f8f8;
position: relative;
overflow: hidden;
}
.text-detail{
margin-top: 40px;
text-align: center;
}
.text-detail>span{
font-size: 40px;
}
.file{
position: absolute;
top:;
left:;
width: 140px;
height: 125px;
opacity:;
}

里边的加号或者删除字样都可以用成字体或者图片,看自己公司需要。

javascript代码

 第一种方式:createObjectURL
 //图片上传预览功能
var userAgent = navigator.userAgent;//用于判断浏览器类型
$(".file").change(function () {
//获取选择图片的对象
var docObj =$(this)[0];
var picDiv=$(this).parents(".picDiv");
//得到所有的图片文件
var fileList = docObj.files;
//循环遍历
for (var i = 0; i < fileList.length; i++) {
//动态添加html元素
var picHtml="<div class='imageDiv' > <img id='img" + fileList[i].name + "' /> <div class='cover'><i class='delbtn'>删除</i></div></div>"
picDiv.prepend(picHtml);
//获取图片imgi的对象
var imgObjPreview = document.getElementById("img"+fileList[i].name);
if (fileList && fileList[i]) {
//图片属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '140px';
imgObjPreview.style.height = '125px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要以下方式
if(userAgent.indexOf('MSIE') == -1){//IE以外浏览器
imgObjPreview.src = window.URL.createObjectURL(docObj.files[i]); //获取上传图片文件的物理路径
}else{//IE浏览器
if(docObj.value.indexOf(",")!=-1){
var srcArr=docObj.value.split(",");
imgObjPreview.src = srcArr[i];
}else{
imgObjPreview.src = docObj.value;
}
}
}
}
});
/*删除功能*/
$(document).on("click",".delbtn",function () {
console.log("click")
var _this=$(this);
_this.parents(".imageDiv").remove();
});

这里有浏览器判断,因为IE和谷歌,火狐等浏览器不同,后两者对于文件路径有浏览器保护,不会显示全文件路径,而IE浏览器则没有,它完整的显示了文件路径,下图可看出。

谷歌浏览器:

IE浏览器:

还有另外一种方式,通过filereader方式预览图片。

JavaScript代码

第二种方式:filereader
1 $(".file").change(function () {
//获取选择图片的对象
var docObj =$(this)[0];
var picDiv=$(this).parents(".picDiv");
//得到所有的图片文件
var fileList = docObj.files;
for(var i=0;i<fileList.length;i++){
var fr = new FileReader();
var single=fileList[i];
fr.onload = function(single) {
var picHtml = "<div class='imageDiv' > <img id='img" + single.name + "' src='" + single.target.result + "' /> <div class='cover'><i class='delbtn'>删除</i></div></div>"
picDiv.prepend(picHtml);
var imgObjPreview = document.getElementById("img" + single.name);
//图片属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '140px';
imgObjPreview.style.height = '125px';
};
fr.readAsDataURL(single);
}
});
/*删除功能*/
$(document).on("click",".delbtn",function () {
console.log("click")
var _this=$(this);
_this.parents(".imageDiv").remove();
});

另外,删除功能的js代码可以如上面代码一样写在外边,也可以写在change事件for循环外,这样就不用on,可以直接以删除按钮的class来写了,如:

 //图片上传预览功能
var userAgent = navigator.userAgent;//用于判断浏览器类型
$(".file").change(function () {
//获取选择图片的对象
var docObj =$(this)[0];
var picDiv=$(this).parents(".picDiv");
//得到所有的图片文件
var fileList = docObj.files;
//循环遍历
for (var i = 0; i < fileList.length; i++) {
//动态添加html元素
var picHtml="<div class='imageDiv' > <img id='img" + fileList[i].name + "' /> <div class='cover'><i class='delbtn'>删除</i></div></div>"
picDiv.prepend(picHtml);
//获取图片imgi的对象
var imgObjPreview = document.getElementById("img"+fileList[i].name);
if (fileList && fileList[i]) {
//图片属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '140px';
imgObjPreview.style.height = '125px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要以下方式
if(userAgent.indexOf('MSIE') == -1){//IE以外浏览器
imgObjPreview.src = window.URL.createObjectURL(docObj.files[i]); //获取上传图片文件的物理路径
}else{//IE浏览器
if(docObj.value.indexOf(",")!=-1){
var srcArr=docObj.value.split(",");
imgObjPreview.src = srcArr[i];
}else{
imgObjPreview.src = docObj.value;
}
}
}
}
/*删除功能*/
$(".delbtn").click(function () {
var _this=$(this);
_this.parents(".imageDiv").remove();
});
});

此篇主要体现了两点:

1.input file 按钮改成自己想要的样式,就是将原本的input隐藏,用另一个标签<a>,<button>,<div>......代替,css控制他们加上自己需要的样式就可以了;

2.图片预览功能的实现,这里又分两种方法。

好了,到这里这篇就写完了,希望对你有所帮助。

 

input file样式修改,图片预览删除功能的更多相关文章

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

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

  2. vue项目中图片预览旋转功能

    最近项目中需要在图片预览时,可以旋转图片预览,在网上找了下,发现有一款功能强大的图片组件:viewerjs. git-hup: https://github.com/fengyuanchen/view ...

  3. 微信企业号办公系统-图片预览放大功能-previewImage

    在微信里看过文章的应该知道,文章里的图片点击后可以放大.分享和保存. 然而自己在微信里开发的网页,里面的图片点击后没办法实现这个效果,然后就去看了下微信JS文档,里面有个previewImage可以调 ...

  4. input(file)样式修改及上传文件名显示

    实现思路: a标签包裹input元素 设置a标签为上传按钮的样式,相对定位 设置input为透明,绝对定位,覆盖到a上面 效果:看到的按钮是a的样式,点击时实际是点击input元素.样式和功能都具备 ...

  5. input.file样式修改

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

  6. 怎么打开Windows Server 2008 图片预览的功能?

    打开一个文件夹,点击菜单中的“工具”->“文件夹选项”,切换到“查看”选项卡,在高级设置中取消如下选项: “始终显示图标,从不显示缩略图” “在缩略图上显示文件图标”

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

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

  8. 适用于各浏览器支持图片预览,无刷新异步上传js插件

    文件上传无疑是web应用中一个非常常用的功能,不管是PHP.jsp还是aspx.mvc等都会需要文件上传,但是众所周知当使用自带的文件上传功能时总会出现页面刷新的情况.当然现在有了html5这个好东西 ...

  9. JS魔法堂之实战:纯前端的图片预览

    一.前言 图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服 ...

随机推荐

  1. Example015实现html中checkbox的全选和反选(2)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. asp.net core 中灵活的配置方式

    asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法. 一.监听地址及端口配置 1,命令行方式 asp.net core系统 ...

  3. 6.解决AXIOS的跨域问题

    在服务端加上: response.addHeader("Access-Control-Allow-Origin", "*"); response.addHead ...

  4. web前端CSS2学习2017.6.17

    CSS---表现层,修饰和表现html文档,为了解决结构层和表现层分离的问题. 通过CSS极大的提高了工作效率,方便工作人员维护和管理CSS:层叠样式表,目前用的最广泛的css版本为css2,最新版本 ...

  5. Java通过Axis2发布WebService

    参考文档: http://blog.csdn.net/ghsau/article/details/12714965 http://www.iteye.com/topic/1135747 http:// ...

  6. XManager与SecureCRT

    使用Xmanager前,服务器必须已经安装好X11所需的各种运行包.运行下列命名检查安装情况,没有的话请自行补上. rpm -qa|grep x11 1.DISPLAY环境变量 export DISP ...

  7. VB6之ICMP实现ping功能

    代码备忘 'code by lichmama from cnblogs.com Private Type IPAddr ip1 As Byte ip2 As Byte ip3 As Byte ip4 ...

  8. 【hibernate初探】之接口说明,session使用

    hibernate作为一个完整的ORM映射框架,通过配置即可以让我们从复杂的JDBC操作中脱离出来.hibernate封装了 JDBC,JTA(java transaction API) 和JNDI. ...

  9. IT行业歧视40岁以上人群为找工作还要谎报年龄[转]

    IT行业歧视40岁以上人群为找工作还要谎报年龄(这样不好) http://www.aliyun.com/zixun/content/2_6_616161.html [赛迪网讯]4月5日消息,许多40多 ...

  10. es6的一些个人总结

    es6的一些知识点 前言:es6(ECMAscript2015)标准 let.const.var的一些区别 let.const 块级作用域.全局作用域.函数作用域 var 全局作用域.函数作用域 变量 ...