input file样式修改以及图片预览删除功能详细概括(推荐)
程序员文章站
2022-04-29 07:59:07
本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能。
效果图如下:
这里主要展示上传预览图片功能,对于删除功能的html及c...
本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能。
效果图如下:
这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这块儿的可以在自己添加修改。
<!--点击预览图片--> <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: 1; top: 0; left: 0; 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: 0; left: 0; width: 140px; height: 125px; opacity: 0; }
里边的加号或者删除字样都可以用成字体或者图片,看自己公司需要。
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
$(".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.图片预览功能的实现,这里又分两种方法。
好了,到这里这篇就写完了,希望对你有所帮助。