美化上传文件框(上传图片框)

传统的表单控件十分简陋,可以说是很难看,那怎么办?

方法:我们自己做一个好看的样式出来,用各种标签啊,css啊,是可以做到的。如图:

《美化上传文件框(上传图片框)》

做出这样一个样子应该是很简单的,但是怎么让他具有上传的功能的呢? 那就使用代理的方法,点击上传就等于点击<input type=”file”>(上传文件表单控件) 废话不多说,直接上代码:

html:

<!DOCTYPE html>

<html lang=”en”>

<head>

<meta charset=”UTF-8″>

<title>测试插件</title>

<link rel=”stylesheet” type=”text/css” href=”css/upload.css”>

<style>

body{font-family:”微软雅黑”;font-size:14px;}

.wrapper{width:800px;margin-right:auto;margin-left:auto;}

</style>

</head>

<body>

<br><br>

<h1 align=”center”>上传图片预览</h1>

<br><br>

<div class=”wrapper”>

<input type=”file”>

</div>

<script src=”js/upload.js”></script>

</body>

</html>

css:


.file{
margin: 0;
padding: 0;
position:relative;
display:inline-block;
margin:0 10px;
vertical-align:top;}

.file img{
margin: 0;
padding: 0;
display:block;
margin-bottom:4%;
border-radius:4px;
border: none;
}
.file button{
margin: 0;
padding: 0;
border:0 none;
width:48%;
line-height:30px;
color:#fff;
border-radius:4px;
cursor:pointer;
outline:0 none;
font-family:inherit;
}
.file button.upload{
background-color:#0f73da;
}
.file button.remove{
background-color:#aaaaaa;
margin-left: 2%;
}
.file input[type=”file”]{
position:absolute;
top:-999em;
visibility:hidden;
}



js:


//init
function initFile(fo){
var divFile = document.createElement(“div”);
divFile.className=”file”;  
fo.parentNode.insertBefore(divFile,fo);
divFile.appendChild(fo);
var  btnRemove = document.createElement(“button”);
btnRemove.className=”remove”;
btnRemove.innerHTML=”移除”;
divFile.insertBefore(btnRemove,fo);
var  btnUpload = document.createElement(“button”);
btnUpload.className=”upload”;
btnUpload.innerHTML=”上传”;
divFile.insertBefore(btnUpload,btnRemove);
var  showImgTar = document.createElement(“img”);
showImgTar.setAttribute(‘src’,’images/nophoto.gif’);
showImgTar.setAttribute(‘width’,’150′);
showImgTar.setAttribute(‘height’,’150′);
divFile.insertBefore(showImgTar,btnUpload);
}
var inputFiles = document.querySelectorAll(“input[type=’file’]”);
inputFiles.forEach(function(inf){
initFile(inf);
})
//file onload
var upload = document.querySelectorAll(“.upload”);
var file = document.querySelectorAll(“.file”);
file.forEach(function(f){
var showImg = f.querySelector(“img”);
var defImgSrc = “images/nophoto.gif”;
var inpFile = f.querySelector(“input[type=’file’]”);
//移除
f.querySelector(“.remove”).onclick = function(){
showImg.src=defImgSrc;
inpFile.value=””;
}
//上传
f.querySelector(“.upload”).onclick = function(){
f.querySelector(“input[type=’file’]”).click();
}
inpFile.onchange = function(){
//判断文件类型
//console.dir(this.value);
var fileName = this.files[0].name;
var fileExt = fileName.split(“.”).pop().toLowerCase();
if(fileExt!=’jpg’ && fileExt!= ‘gif’ && fileExt!= ‘png’){
alert(“请上传jpg,gif,png图片”);
this.value=””;
return;
}
//判断文件大小
var fileSize = 1024 * 1024 * 2;
if(this.files[0].size>=fileSize){
alert(“图片大于2M,请重新选择”);
this.value=””;
return;
}
//创建fileReader对象
var reader =  new FileReader();
//图片编码完成
reader.onloadend = function(e){
showImg.src = e.target.result;
}
  //解析图片 成base 64位的图片 用fileReader的readAsDataURL 去读本地图片对象
reader.readAsDataURL(this.files[0]);
}
})



代码复制了就可以直接运行了。


这里给大家解释下思路:

当你点击了上传按钮时,执行
f.querySelector(“input[type=’file’]”).click();,让表单控件也点击。
然后选择图片(因为这里的样式时上传图片的样子,其实删掉一些代码也可以上传别的东东),
选择后代码执行了inpFile.onchange = function()这个函数,将图片传进来,判断文件类型,判断文件大小
将图片解析成base 64位的图片,然后就可以将结果放在页面上预览了。
这样表现和行为都有了, 既漂亮又有用。




而init()方法就是初始化input表单,让光头司令<input type=”file”>最终变成了下面的代码:
<div class=”file”>
 <img src=”images/nophoto.gif” width=”150″ height=”150″>
 <button class=”upload”>上传</button>
 <button class=”remove”>移除</button>
 <input type=”file”>
</div>

从而来美化上传框




















sad




    原文作者:读着对白
    原文地址: https://blog.csdn.net/luoxuehui_blog/article/details/79158309
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞